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

最新文章

  1. 建模前的数据清洗/ETL(python)
  2. Leetcode First Missing Positive
  3. linux内核分析——扒开系统调用的三层皮(上)
  4. redis 安装及相关问题解决
  5. 有了malloc/free为什么还要new/delete ?
  6. 微信jssdk,实现多图上传的一点心得
  7. storm - 使用过程中的一点思考
  8. struts2 测试错题解析
  9. Ajax之HTTp请求
  10. Keil &quot;RECURSIVE CALL TO SEGMENT&quot;彻底解决
  11. windows下以指定用户访问SMB服务器进行读写
  12. php __set()和__get()函数
  13. Jmeter工具进行一个完整的接口测试
  14. 浅谈Java线程安全
  15. fork()相关的源码解析
  16. Rop框架学习笔记
  17. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告
  18. winserver 搭建 Citrix License 许可服务器
  19. MySql错误处理-错误处理的例子
  20. P&#183;C&#183;L 了解

热门文章

  1. 突然萌发关于 redis 的想法(2)
  2. selenium之python源码解读-WebDriverWait
  3. docker学习(四)
  4. 45 | 自增id用完怎么办?
  5. 常见的时间字符串与timestamp之间的转换 时间戳
  6. FF,NF,BF
  7. P4514 上帝造题的七分钟——二维树状数组
  8. [bzoj 1861][zjoi2006] 书架
  9. maven引入第三方jar包
  10. expect 实例