import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver{
//當接收短信時被觸發
@Override
public void onReceive(Context context, Intent intent) {
// 如果是接收到短信
if(intent.getAction().equals("android.provider.Telephony。SMS_RECEIVER")){
//取消廣播(這行代碼將會讓系統收不到短信)
abortBroadcast();
StringBuilder sb = new StringBuilder();
//接收由SMS傳過來的數據
Bundle bundle = intent.getExtras();
//判斷是否有數據
if(bundle != null){
//通過pdus可以獲得接收到的所有短信消息
Object[] pdus = (Object[])bundle.get("pdus");
//構建短信對象array,並依據收到的對象長度來創建array的大小
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i = 0 ; i <pdus.length ; i++){
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
//將送來的短信合並自定義信息於StringBuilder當中
for(SmsMessage message : messages){
sb.append("短信來源:");
//獲得接收短信的電話號碼
sb.append(message.getDisplayOriginatingAddress());
sb.append("\n-----短信內容-----\n");
//獲得短信的內容
sb.append(message.getDisplayMessageBody());
}
}
Toast.makeText(context, sb.toString(), 5000).show();
}
}
}
為了讓該程序在系統的短信接收程序之前被啟動,需要將該BroadcastReceiver的優先級設置得高一些,在AndroidManifest.xml文件中通過如下代碼來配置該BroadcastReceiver:
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="800">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>