Android studio之廣播監聽接收短信


一. 在清單文件中(AndroidManifest.xml)添加短信權限

這里我用的android studio版本是3.3的

 

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

二.3.2以上的android studio可直接新建廣播SMSReceiver

注意(這里新建的廣播類,它默認為靜態廣播,所以在清單文件會自動生成以下代碼)

<!-- <receiver -->
<!-- android:name=".SMSReceiver" -->
<!-- android:enabled="true" -->
<!-- android:exported="true"> -->
<!-- <intent-filter android:priority="20"> -->
<!-- <action android:name="android.provider.Telephony.SMS_RECEIVED"/> -->
<!-- </intent-filter> -->
<!-- </receiver> -->

我用的是動態注冊廣播,這里注釋掉

 直接上廣播類SMSReceiver的代碼public String msgBody="";

 public String originatingAddress="";

Context context;
public SMSReceiver(Context context){
    this.context=context;
}
@Override
public void onReceive(Context context, Intent intent) {
    String action =  intent.getAction();
    if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
        //獲取短信內容,有可能一次發來多條短信
        Object[] objects = (Object[]) intent.getExtras().get("pdus");
        for (Object obj : objects) {
            //獲取短信對象
            SmsMessage msg = SmsMessage.createFromPdu((byte[]) obj);
            //獲取短信內容
            msgBody = msg.getDisplayMessageBody();
            //獲取發信人的電話號碼
            originatingAddress = msg.getOriginatingAddress();
            Log.i("wk", "短信內容==>" + msgBody + " 來自==>" + originatingAddress);
            Toast.makeText(context,"短信內容==>" + msgBody + " 來自==>" + originatingAddress,Toast.LENGTH_SHORT).show();
        }
    }
}

 

三.  注冊動態廣播,並申請系統短信權限

SMSReceiver smsReceiver=new SMSReceiver(SMSActivity.this);
 
        
//動態注冊廣播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(smsReceiver,intentFilter);
 
/**
 * *
檢查申請短信權限
 * */
private void checkSMSPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)  != PackageManager.PERMISSION_GRANTED) {
        //未獲取到讀取短信權限
        Toast.makeText(this,"未獲取權限",Toast.LENGTH_SHORT).show();
        // 向系統申請權限
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
    } else
        {
            query();
        }
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//判斷用戶是否,同意 獲取短信授權
if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//獲取到讀取短信權限
query();
} else {
Toast.makeText(this, "未獲取到短信權限", Toast.LENGTH_SHORT).show();
}

}
 
 
//根據之前在廣播類公有屬性短信內容和短信來源,在activity界面可以直接獲取,並讀取顯示
//顯示最近一條信息
private void dispLast(){
       String msg=smsReceiver.msgBody;
       String originatingAddress=smsReceiver.originatingAddress;
      edit_sms.setText("短信內容==>" + msg + " 來自==>" + originatingAddress);
}
 

 

 


免責聲明!

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



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