知识养成了思想,思想同时又在融化知识。这篇文章主要讲述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之广播监听接收短信】
推荐阅读
- elasticsearch 的post put 方式的对比 setting mapping设置
- 二十二(视图之add_url_rule和app.route)
- Android Studio采坑记录
- 分析SAN LUN Mapping出错导致文件系统共享冲突的情况
- android修改默认输入法
- Appium 环境配置
- ACCT648 Applied Statistics for Data Analysis
- SpringBoot配置文件application.properties数据库配置
- 17.安卓通知