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之广播监听接收短信的更多相关文章
- Android监听系统短信数据库变化-提取短信内容
由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...
- Android Studio精彩案例(五)《JSMS短信验证码功能实现》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...
- Android手机使用广播监听手机收到的短信
我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...
- Android 监听SMS短信
当设备接收到一条新的SMS消息时,就会广播一个包括了android.provider.Telephony.SMS_RECEIVED动作的Intent. 注意,这个动作是一个字符串值,SDK 1.0不再 ...
- Android中定义广播监听,其他页面发送
private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...
- Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结
一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...
- Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...
- android 广播 接收短信
; i < messages.length; i++) { SmsMessage ms = SmsMessage.createFromPdu((byte[])pdus[i]); String f ...
- Android Back Home键监听
Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...
随机推荐
- BZOJ4802 欧拉函数 (Pollard-Rho Miller-Robin)
题目 求大数的欧拉函数φ\varphiφ 题解 Pollard-Rho 板子 CODE #pragma GCC optimize (3) #include <bits/stdc++.h> ...
- LeetCode 273. Integer to English Words
原题链接在这里:https://leetcode.com/problems/integer-to-english-words/description/ 题目: Convert a non-negati ...
- Wireshark抓取本地回环接口数据包 RawCap.exe
Wireshark提供了winpcap可以抓取远程网卡数据包...但我尝试了不成功.后来发现RawCap.exe不仅可以抓取回环接口数据包,远程跑了拿到pcap文件再打开用起来比winpcap更方便最 ...
- maven管理的jsp-web应用如何添加servlet、jsp相关依赖(org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp)
明明tomcat下面就有这些包,然而还需要在maven依赖里面加上这个依赖 <!--引入Servlet开始--> <dependency> <groupId>jav ...
- 前端武器库之DOM练习
1.模态对话框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- JRebel for IntelliJ激活
好久没用jrebel了,跟前端进行项目联调总是有些许改动,还是热部署方便. 目前用的idea版本:IntelliJ IDEA 2019.2 JRebel插件版本:JRebel for IntelliJ ...
- python3编程基础之一:程序结构
程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句.函数或代码块,掌握程序的结构,有利于把握程序的主体框架. 1.顺序结构--最常见的结构 顺序结构的程序设计是最简单的,只要按照解决问题的 ...
- Mysql之数据库设计规范
1. 三大范式首先要明白”范式(NF)”是什么意思.按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”.数据库范式也分为1NF,2NF,3NF,B ...
- 使用Adivisor配置增强处理,来实现数据库读写分离
一.先写一个demo来概述Adivisor的简单使用步骤 实现步骤: 1.通过MethodBeforeAdivice接口实现前置增强处理 public class ServiceBeforeAdvis ...
- Mininet系列实验(六):Mininet动态改变转发规则实验
一. 实验目的 熟悉Mininet自定义拓扑脚本的编写:熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为.在本实验中,基于Mi ...