Android——SMS接收发短信与运行权限
好久没写了,最近学习Android的相关知识,包括UI组件与布局、Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager、SmsManages的使用。还有就是这里涉及到的权限问题,在清单文件中加入相关的权限,还有就是运行权限。具体请看下面例子:
发短信(SmsManager):
发短信比较简单,我们可以定义一个类,通过传参(包括号码与内容)的方式进行进一步操作。
import android.telephony.SmsManager;
import java.util.ArrayList;
public class SendMsg {
String message;
String phone;
public SendMsg(String message, String phone) {
this.message = message;
this.phone = phone;
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> list = smsManager.divideMessage(message);
for (String text:list) {
smsManager.sendTextMessage(phone, null, text, null, null);
}
}
}
在manifest清单文件中加入
<uses-permission android:name="android.permission.SEND_SMS" />
在主MainActivity中加入运行权限
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, 1);
}
}
接着就是重写onRequestPermissionsResult
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//这里写操作 如send(); send函数中New SendMsg (号码,内容);
} else {
Toast.makeText(this, "你没启动权限", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
在接下来就是接收短信,方式有很多这里就不一一介绍了,主要讲讲使用Broadcast。而设计到广播,就需要了解广播的相关知识,具体不会讲很多以后慢慢更新。
广播需要创建一个Receiver进行监听短信的查收。如下:
import...
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phone = "10086";
String num, con;
//读取data中存入的安全号码
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] objs = (Object[]) bundle.get("pdus");
SmsMessage[] smsMessages = new SmsMessage[objs.length];
for (int i = 0; i < objs.length; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
num = smsMessages[i].getDisplayOriginatingAddress(); //短信的号码
con = smsMessages[i].getDisplayMessageBody(); //短信的内容
Toast.makeText(context, num + "----" + con, Toast.LENGTH_SHORT).show();
System.out.println("号码:" + num + "内容:" + con);
SendMsg sendMsg = new SendMsg("号码:" + num + "内容:" + con, phone);
if (num.equals(phone)) {
//这里可以写一些自己的其他操作 (如包括匹配相应的号码进行操作)
}
}
abortBroadcast(); //这里是对短信进行拦截但是并不能实现
}
}
写完receiver之后就可以进行注册(静态与动态),这里就写静态了如下:
<receiver
android:name=".SMSReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000"> <!-- 这是优先权--!>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
上面的intent-filter便是静态注册了,打开APP便进行短信监听
还有就是权限问题:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
运行权限:
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECEIVE_SMS)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},2);
}
onRequestPermissionsResult方法如上
Android——SMS接收发短信与运行权限的更多相关文章
- 向android模拟器打电话发短信的简单方法
在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...
- android打电话、发短信实现
打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...
- 如何向Android模拟器打电话发短信
1. 启动Android Emulator, 查看标题栏找出端口.一般是android emulator(5554),其中5554就是端口. 2. 打开命令行,输入telnet localhost 5 ...
- 【转】如何向Android模拟器打电话发短信
转载地址:http://hi.baidu.com/jeremylai/item/420f9c9fe4881fccb62531f7 1. 启动Android Emulator, 查看标题栏找出端口.一般 ...
- Android BroadcastReceiver 接收收到短信的广播
一.知识介绍 1.broadcastReceiver是广播接受者,四大组件之一. 2.Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息. 3.使用场景: ①当手机没有电 ...
- android 双卡手机发短信/判断手机是否为双卡
通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...
- Android Tips: 打电话和发短信
利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...
- iOS基本的发短信和打电话调用
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...
- h5打电话发短信写邮件怎么实现
// 一.打电话<a href="tel:0755-10086">打电话给:0755-10086</a> // 二.发短信,winphone系统无效< ...
随机推荐
- PHP程序员的能力水平层次
PHP程序员的能力水平层次 之前看过很多篇关于服务端工程师和PHP开发者的能力模型介绍,每篇都对能力有侧重点. 下面我们来详细谈谈以开发能力为基准点的PHP程序员的能力水平层次. 层层递进 1.功能开 ...
- JWT(JSON Web Token)
摘要: 在Web应用中,使用JWT替代session并不是个好主意 适合JWT的使用场景 抱歉,当了回标题党.我并不否认JWT的价值,只是它经常被误用. 什么是JWT 根据维基百科的定义,JSON W ...
- BZOJ2521:[SHOI2010]最小生成树(最小割)
Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...
- php实现TXT小说章节解析、小说章节在线阅读
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 要实现TXT文本章节的解析,大概思路是在每个章节加入了特定的字符,然后根据字符的起始位 ...
- 使用Nginx实现反向代理
一.代理服务器 1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务 ...
- 三.js实例
1.完成一个双色球,红球的自选效果 规则:1-33 用表格画出一个1到33的格子,点击一个自选按钮,将随机选中6个数字,每个表格对应的数字的背景就改为一个红球的效果 双色球.html <!DOC ...
- modbus与rs485的关系_modbus与rs485的区别和联系
http://www.elecfans.com/tongxin/123/20180103610476.html 经常看到RS485和MODBUS写在一起,它们的区别和联系? RS485是一个物理接口, ...
- 解决Nginx+Tomcat下客户端https请求跳转成http的问题
Nginx上开启https, 后端使用Tomcat, 两者间走http协议, 但发现如果tomcat应用存在跳转时, 则客户端浏览器会出现400 Bad Request的错误, 通过抓包发现原因是 ...
- LeetCode264:Ugly Number II
自己的做法超时了.主要是每次生成一个数据,保存到list中,然后对List重新排序.排序太耗费时间 记录下讨论组里的写法 public int NthUglyNumber(int n) { int[] ...
- C# zip -ICSharpCode.SharpZipLib
利用第三方组件 ICSharpCode.SharpZipLib download from: https://github.com/icsharpcode/SharpZipLib using S ...