Android编程实现拦截短信并屏蔽系统Notification的方法
作者:傲慢的上校 时间:2022-09-16 01:55:14
本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法。分享给大家供大家参考,具体如下:
拦截短信有几个关键点:
1.android接收短信时是以广播的方式
2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>
3.要写个广播接收类
public class smsreceiveandmask extends BroadcastReceiver {
private String TAG = "smsreceiveandmask";
@Override
public void onReceive(Context context, Intent intent) {
}
public class smsreceiveandmask extends BroadcastReceiver {
private String TAG = "smsreceiveandmask";
@Overridepublic void onReceive(Context context, Intent intent) {}
4.Manifest.xml的receiver标签里要加入intent-filter ,action为
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
5.重要的是要在这个intent-filter上加上priority优先级,以使自己接收到SMS优先于系统或其它软件
<receiver android:name=".smsreceiveandmask" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".smsreceiveandmask" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
6.当自己的程序接收到要屏蔽的SMS后,用 this.abortBroadcast();来结束广播的继续发给别的程序,这样系统就不会收到短信广播了,Notification也不会有提示了
// 第三步:取消
if (flags_filter) {
this.abortBroadcast();
}
// 第三步:取消if (flags_filter) {this.abortBroadcast();}
源码如下:
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hwttnet.test.smsreceiveandmask" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".smsreceiveandmask" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.hwttnet.test.smsreceiveandmask" android:versionCode="1"android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".smsreceiveandmask" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
BroadcastReceiver类:
package com.hwttnet.test.smsreceiveandmask;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class smsreceiveandmask extends BroadcastReceiver {
private String TAG = "smsreceiveandmask";
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, ">>>>>>>onReceive start");
// 第一步、获取短信的内容和发件人
StringBuilder body = new StringBuilder();// 短信内容
StringBuilder number = new StringBuilder();// 短信发件人
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
number.append(currentMessage.getDisplayOriginatingAddress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
if (smsNumber.contains("+86")) {
smsNumber = smsNumber.substring(3);
}
// 第二步:确认该短信内容是否满足过滤条件
boolean flags_filter = false;
if (smsNumber.equals("10086")) {// 屏蔽10086发来的短信
flags_filter = true;
Log.v(TAG, "sms_number.equals(10086)");
}
// 第三步:取消
if (flags_filter) {
this.abortBroadcast();
}
}
Log.v(TAG, ">>>>>>>onReceive end");
}
}
希望本文所述对大家Android程序设计有所帮助。
标签:Android,短信,Notification
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C++ 实现求最大公约数和最小公倍数
2023-10-30 10:49:23
RocketMQ事务消息保证消息的可靠性和一致性
2022-09-05 00:25:26
Linux系统下安装和卸载JDK8的方式
2023-08-01 15:29:45
![](https://img.aspxhome.com/file/2023/7/108177_0s.png)
Android实现手机震动效果
2022-11-05 12:20:43
C#/VB.NET实现创建PDF/UA文件的示例代码
2023-05-02 23:31:51
![](https://img.aspxhome.com/file/2023/1/104321_0s.jpg)
springboot整合微信支付sdk过程解析
2021-12-30 22:47:29
![](https://img.aspxhome.com/file/2023/6/59886_0s.jpg)
@Value如何获取yml和properties配置参数
2021-12-12 13:24:01
![](https://img.aspxhome.com/file/2023/3/76473_0s.png)
Springboot异常日志输出方式
2022-04-14 05:38:27
![](https://img.aspxhome.com/file/2023/3/85503_0s.png)
kettle中使用js调用java类的方法
2022-05-09 00:06:31
Java虚拟机使用jvisualvm工具远程监控tomcat内存
2023-11-28 22:15:49
![](https://img.aspxhome.com/file/2023/2/60462_0s.png)
SpringBoot整合JDBC、Druid数据源的示例代码
2022-06-19 20:44:24
![](https://img.aspxhome.com/file/2023/6/86736_0s.png)
spring-boot-maven-plugin 配置有啥用
2022-08-27 19:09:25
![](https://img.aspxhome.com/file/2023/9/71839_0s.jpg)
C#中的Linq Intersect与Except方法使用实例
2021-11-30 01:25:52
![](https://img.aspxhome.com/file/2023/7/69787_0s.png)
springboot + mybatis + druid + 多数据源的问题详解
2023-01-24 15:59:58
![](https://img.aspxhome.com/file/2023/2/84282_0s.png)
Java Lambda 表达式源码解析
2021-06-30 08:12:48
![](https://img.aspxhome.com/file/2023/8/76548_0s.png)
Android Zxing生成二维码经典案例分享
2022-12-22 10:38:27
如何使用Spring AOP预处理Controller的参数
2022-09-11 10:01:56
![](https://img.aspxhome.com/file/2023/1/73121_0s.png)
Hibernate实现批量添加数据的方法
2023-11-29 08:53:56
![](https://img.aspxhome.com/file/2023/5/60815_0s.jpg)
Java项目实战之在线考试系统的实现(系统介绍)
2022-12-22 11:23:05
![](https://img.aspxhome.com/file/2023/3/127213_0s.jpg)
Java 实现repalceAll只替换第二个匹配到的字符串
2021-06-12 11:56:20