使用BroadcastReceiver監聽系統接收的短信


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM