一. 在清單文件中(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);
}
