Android studio之广播监听接收短信

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述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);
}

 

 
【Android studio之广播监听接收短信】 

    推荐阅读