Android小項目之--電話與短信服務(附源碼)
2010-06-09 23:14 Terry_龙 阅读(5681) 评论(6) 编辑 收藏 举报在 Android 上實現電話與短信服務相信己經是老生常談了,有些人或許認為沒有必要拿出來談,網上一抓一大把。確實是,網上現在有很多調用 Android 電話與短信服務的例子,今天特地拿出來談,只是因為有一些小技巧還是有拿出來談的必要的。
什麽是Intent
使用 Intent之前我們有必要先認識一下 Intent。
Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向 Android 表達某種請求或者意愿,Android 會根據意願的內容選擇適合的組件來請求。比如本例中使用的打電話功能,那么這個Acitivity只需要發出 Intent.ACTION_CALL 請求給Android ,剩下只要交給Android 來處理即可。
Intent的主要組成部份
Intent對象抽象地描述了要執行的操作,其描述的基本內容可以分為組件名稱、Action(動作)、Data(數據)、Category(類別)、Extra(附加信息)和Flag(標誌位)6部份,具體的使用功能可查看相關文檔,這里不多介紹。
解析 Intent
Intent是一種在不同組件之間傳遞的請求消息,是應用程序發出的請求和意圖。作為一個完整的消息傳遞機制, Intent 不僅需要發送端,還需要接收端。那么Intent如何解析 Intent 的請求內容,并選擇合適的組件響應 Intent 請求呢?本篇就會告訴大家,請繼續往下看。
用Intent激活程序---電話與短信
本篇中使用的 Intent 打電話程序中,Intent 的行為是 ACTION_DIAL,同時在 Intent 中傳遞被呼叫人的電話號碼。
撥打電話的關鍵有兩個方面,首先,要在 AndroidManifest 中添加 uses-permission(即為程序分配使用權限),并聲明android:name="android.permission.CALL_PHONE" 權限。由於打電話是屬於手機的底層服務,與用戶隱私及通話費用等話題息息相關,困此,程序必須取得權限。其次,通過自定義 Intent 對象,帶入“ACTION_CALL” 這個關鍵(Action),以及通過Uri.parse()的方法將用戶輸入電話號碼(Data)帶入,最后以 startActivity()方法,即可完成,代碼如下:
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class phoneAndsmsAcitivity extends Activity {
private Button myButton;
private EditText myEditText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton=(Button)findViewById(R.id.button);
myEditText=(EditText)findViewById(R.id.mobile);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(myEditText.getText().length()>0)
{
Intent myIntent=new Intent(Intent.ACTION_CALL,Uri.parse
("tel:"+myEditText.getText().toString()));
phoneAndsmsAcitivity.this.startActivity(myIntent);
}
}
});
}
}
運行效果:
短信也是任何一款手機不可或缺的應用之一,幾乎是手機使用頻率最高的應用之一(不發短信的飄過~~~~~~)。Android自帶有一個發短信的類 SmsManager,利用這個類,我們可以完成手機的短信發送與接收工作,其中 sentTextMessage() 方法需要傳入五個值,依次是收件人地址(String)、發送人地址(String)、正文(String)、發送服務(PendingIntent)、與送達服務(PendingIntent),其中收件人與正文是不可為NULL的參數。跟打電話一樣,涉及到與金錢有關的必須在配置文件分配權限,權限代碼如下:<uses-permission android:name="android.permission.SEND_SMS"/>,smsManager的公開方法如下:
簡單的發送短信代碼:
import java.util.List;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
@SuppressWarnings("deprecation")
public class smsAcitivity extends Activity {
private Button myButton;
private EditText myEditText;
private EditText EditText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sms);
myButton=(Button)findViewById(R.id.button);
myEditText=(EditText)findViewById(R.id.mobile);
EditText2=(EditText)findViewById(R.id.content);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String mobile=myEditText.getText().toString();
String content=EditText2.getText().toString();
SmsManager sms=SmsManager.getDefault();
PendingIntent sentintent =PendingIntent.getBroadcast(smsAcitivity.this,
0, new Intent(), 0);
try {
if(content.length()>70)
{
List<String> msgs=sms.divideMessage(content);
for(String msg:msgs)
{
sms.sendTextMessage(mobile, null, msg, sentintent, null);
}
}
else
{
sms.sendTextMessage(mobile, null, content, sentintent, null);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Toast.makeText(smsAcitivity.this, "短信發送成功", 1000).show();
}
});
}
}
關於一個測試的小技巧:發送短信的時候我們需要兩台機子可以測試,這時候我們要同時啟動兩個模擬器己達到發送與接收的效果,這時候你可以如下操作:開始 --cmd--emulator -data foo 依此在 dos 命令中輸入,即可重新打開一個模擬器,下麵是收送測試效果圖:
疑問:
不知道有沒有細心的朋友發現。好像Google API 中不建議使用 smsManager 這個類來發送短信,如果是不建議那是否有另外的替代方案?如果知道的園友不妨告知一聲。。非常感激。
源碼下載:/Files/TerryBlog/phoneAndsms.rar
如果你有什麽疑問或者建議 你可以 QQ 285735942 或 Email:terryyhl@gmail.com