一. 在清单文件中(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之广播监听接收短信的更多相关文章

  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. nginx配置url伪静态

    rewrite 规则 定向路径 重写类型; 举例: rewrite  (.*)/web/(.*)-(.*)-(.*).html$  $1/web/index.php?r=$2/$3/$4  last; ...

  2. 2-set 1823: [JSOI2010]满汉全席

    这个题告诉我变量循环使用,一定要赋好初值!!!!!! 一定要赋好初值!!!!!!一定要赋好初值!!!!!!一定要赋好初值!!!!!! #include<iostream>#include& ...

  3. LibreOJ #116. 有源汇有上下界最大流

    二次联通门 : LibreOJ #116. 有源汇有上下界最大流 /* LibreOJ #116. 有源汇有上下界最大流 板子题 我也就会写写板子题了.. 写个板子第一个点还死活过不去... 只能打个 ...

  4. 8、RDD持久化

    一.RDD持久化 1.不使用RDD持久化的问题 2.RDD持久化原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的par ...

  5. List集合类

    1.1:  List.add方法——向集合列表中添加对象 public static void main(String[] args) { List<String> list=new Ar ...

  6. js自动访问数据库

    js自动访问数据库 maven依赖 <dependencies> <dependency> <groupId>junit</groupId> <a ...

  7. C++ 获取二维数组的一维长度

    行长度: ]); 列长度: ][]); ]); int column = lines / row;

  8. mysql PS1个性化

    method ) $ export MYSQL_PS1="\u@\h [\d]> " method ) mysql> prompt \u@\h [\d]> met ...

  9. 2018-2019-2 20165312《网络对抗技术》Exp9 Web安全基础

    2018-2019-2 20165312<网络对抗技术>Exp9 Web安全基础 目录 Exp9_1安装Webgoat Exp9_2 SQL注入攻击 Numeric SQL Injecti ...

  10. 代码检查p626

    1 编译运行p626 图10-3代码,提交编译运行的截图 2 STDOUT_FILENO的值是多少?提交在Ubuntu中查找这个值的命令截图