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

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

  1. <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类

注意(这里新建的广播类,它默认为静态广播,所以在清单文件会自动生成以下代码)

  1. <!-- <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="";


  1. public String originatingAddress="";
  2. Context context;
  3. public SMSReceiver(Context context){
  4.     this.context=context;
  5. }
  6. @Override
  7. public void onReceive(Context context, Intent intent) {
  8.     String action =  intent.getAction();
  9.     if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
  10.         //获取短信内容,有可能一次发来多条短信
  11.         Object[] objects = (Object[]) intent.getExtras().get("pdus");
  12.         for (Object obj : objects) {
  13.             //获取短信对象
  14.             SmsMessage msg = SmsMessage.createFromPdu((byte[]) obj);
  15.             //获取短信内容
  16.             msgBody = msg.getDisplayMessageBody();
  17.             //获取发信人的电话号码
  18.             originatingAddress = msg.getOriginatingAddress();
  19.             Log.i("wk", "短信内容==>" + msgBody + " 来自==>" + originatingAddress);
  20.             Toast.makeText(context,"短信内容==>" + msgBody + " 来自==>" + originatingAddress,Toast.LENGTH_SHORT).show();
  21.         }
  22.     }
  23. }

三.  注册动态广播,并申请系统短信权限

  1. SMSReceiver smsReceiver=new SMSReceiver(SMSActivity.this);
  1.  
  1. //动态注册广播
  1. IntentFilter intentFilter = new IntentFilter();
  2. intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
  3. registerReceiver(smsReceiver,intentFilter);
  1.  
  1. /**
  2.  * * 检查申请短信权限
  3.  * */
  4. private void checkSMSPermission() {
  5.     if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)  != PackageManager.PERMISSION_GRANTED) {
  6.         //未获取到读取短信权限
  7.         Toast.makeText(this,"未获取权限",Toast.LENGTH_SHORT).show();
  8.         // 向系统申请权限
  9.         ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
  10.     } else
  11.         {
  12.             query();
  13.         }
  14. }
  1. @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  2.  
  3. 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();
    }
  4.  
  5. }
  1.  
  1.  
  1. //根据之前在广播类公有属性短信内容和短信来源,在activity界面可以直接获取,并读取显示
  1. //显示最近一条信息
  2. private void dispLast(){
  3.        String msg=smsReceiver.msgBody;
  4.        String originatingAddress=smsReceiver.originatingAddress;
  5.       edit_sms.setText("短信内容==>" + msg + " 来自==>" + originatingAddress);
  6. }
  1.  

Android studio之广播监听接收短信的更多相关文章

  1. Android监听系统短信数据库变化-提取短信内容

    由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...

  2. Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...

  3. Android手机使用广播监听手机收到的短信

    我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...

  4. Android 监听SMS短信

    当设备接收到一条新的SMS消息时,就会广播一个包括了android.provider.Telephony.SMS_RECEIVED动作的Intent. 注意,这个动作是一个字符串值,SDK 1.0不再 ...

  5. Android中定义广播监听,其他页面发送

    private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...

  6. Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结

    一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...

  7. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容

    在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...

  8. android 广播 接收短信

    ; i < messages.length; i++) { SmsMessage ms = SmsMessage.createFromPdu((byte[])pdus[i]); String f ...

  9. Android Back Home键监听

    Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...

随机推荐

  1. 33、[源码]-AOP原理-获取拦截器链-MethodInterceptor

    33.[源码]-AOP原理-获取拦截器链-MethodInterceptor

  2. vuex的使用介绍

    1.vuex是什么? vuex是一个专为vue.js应用程序开发的状态管理模式(它采用集中式存贮管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化). 2.vuex的核心概念? ...

  3. CF359D Pair of Numbers gcd+暴力

    利用区间 gcd 个数不超过 log 种来做就可以了~ code: #include <bits/stdc++.h> #define N 300005 #define setIO(s) f ...

  4. 爬虫(十七):scrapy分布式原理

    一:scrapy工作流程 scrapy单机架构: 单主机爬虫架构: 分布式爬虫架构: 这里重要的就是我的队列通过什么维护?这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Valu ...

  5. linux系列(十三):less命令

    1.命令格式: less [参数]  文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 的功能不如less,而且 less 在查看之前不会加载整个文 ...

  6. linux系列(十六):which命令

    1.命令格式: which 可执行文件名称 2.命令功能: which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果. 3.命令参数: -n 指定文件名长度,指定的长 ...

  7. Codeforces 1175G Yet Another Partiton Problem [DP,李超线段树]

    Codeforces 思路 首先吐槽一句:partiton是个什么东西?我好像在百度翻译里面搜不到呀qwq 发现不了什么性质,那就直接上DP吧.注意到DP可以分层,所以设\(dp_i\)表示当前层,分 ...

  8. VM 虚拟机 CentOS 7 设置 桥接网络

    桥接网络的设置:   安装时设置网络为桥接网络!   找到 ip 地址,设置如下   注意ip地址并不是一样的,用以区分   然后在关闭 windows 防火墙,打开 cmd 使用 ping 命令 O ...

  9. jmeter+ant执行 报错:Reference xslt.classpath not found 【采坑记录】

    问题: report: BUILD FAILED E:\jmeter\apache-jmeter-4.0\testcase\build.xml:29: The following error occu ...

  10. 【解决方案】SpringCloud项目优雅发版、部署

    背景 SpringCloud分布式项目,部署在多个节点上.一般的发版方式是,使用Kill -15 pid,逐一地关闭.部署.重启. 但中间涉及到一个问题,当执行kill命令时,服务虽然关闭,但Eure ...