Android编程实现拦截短信并屏蔽系统Notification的方法

本文实例讲述了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程序设计有所帮助。

时间: 2015-12-12

Android Notification.Builder通知案例分享

随着Android系统的不断升级,相关Notification的用法有很多种,有的方法可能已经被android抛弃了,下面为大家分享一下个人如何实现Android Notification通知小案例源代码,供大家参考. Android Notification.Builder通知小案例,具体代码示例如下: package com.example.day6ke; import android.app.Notification; import android.app.NotificationMana

Android中关于Notification及NotificationManger的详解

Android状态栏提醒 在Android中提醒功能也可以用AlertDialog,但是我们要慎重的使用,因为当使用AlertDialog的时候,用户正在进行的操作将会被打断,因为当前焦点被AlertDialog得到.我们可以想像一下,当用户打游戏正爽的时候,这时候来了一条短信.如果这时候短信用AlertDialog提醒,用户必须先去处理这条提醒,从而才能继续游戏.用户可能会活活被气死.而使用Notification就不会带来这些麻烦事,用户完全可以打完游戏再去看这条短信.所以在开发中应根据实际

Android界面 NotificationManager使用Bitmap做图标

今天看到EOE问答里面有这"[Android 界面]NotificationManager 如何使用Bitmap做图标"这样一个问题,在论坛搜索也没有好的案例 特写一个简单的demo供大家参考 今天发布的是NotificationManager 使用Bitmap做图标 关键code 复制代码 代码如下: public void notification(int flag) { Notification notification = new Notification(); //设置sta

android notification 的总结分析

分类 notification有以下几种: 1>普通notification 1.内容标题 2.大图标 3.内容 4.内容附加信息 5.小图标 6.时间 2>大布局Notification 图1 大布局notification是在android4.1以后才增加的,大布局notification与小布局notification只在'7'部分有区别,其它部分都一致.大布局notification只有在所有notification的最上 面时才会显示大布局,其它情况下显示小布局.你也可以用手指将其扩

详解Android中Notification通知提醒

在消息通知时,我们经常用到两个组件Toast和Notification.特别是重要的和需要长时间显示的信息,用Notification就最 合适不过了.当有消息通知时,状态栏会显示通知的图标和文字,通过下拉状态栏,就可以看到通知信息了,Android这一创新性的UI组件赢得了用户的一 致好评,就连苹果也开始模仿了.今天我们就结合实例,探讨一下Notification具体的使用方法.  首先说明一下我们需要实现的功能是:在程序启动时,发出一个通知,这个通知在软件运行过程中一直存在,相当于qq的托盘

android使用NotificationListenerService监听通知栏消息

NotificationListenerService是通过系统调起的服务,在应用发起通知时,系统会将通知的应用,动作和信息回调给NotificationListenerService.但使用之前需要引导用户进行授权.使用NotificationListenerService一般需要下面三个步骤. 注册服务 首先需要在AndroidManifest.xml对service进行注册. <service android:name=".NotificationCollectorService&q

Android中通过Notification&NotificationManager实现消息通知

notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户.它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径. 1.新建一个android项目 我新建项目的 minSdkVersion="11",targetSdkVersion="19".也就是支持最低版本的3.0的. 2.习惯性地打开项目清单文件AndroidManifest.xml,添加一个权限:&

Android开发 -- 状态栏通知Notification、NotificationManager详解

本想自己写一个的,但是看到这篇之后,我想还是转过来吧,实在是非常的详细: 在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationManager . Notification. NotificationManager :  是状态栏通知的管理类,负责发通知.清楚通知等. NotificationManager 是一个系统Service,必须通过 getSys

Android中通知Notification使用实例(振动、灯光、声音)

本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动.灯光.声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import java.io.File; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; im

android中创建通知栏Notification代码实例

///// 第一步:获取NotificationManager NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ///// 第二步:定义Notification Intent intent = new Intent(this, OtherActivity.class); //PendingIntent是待执行的Intent PendingIntent pi

Android中创建多线程管理器实例

如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求.当需要在资源可用时自动执行任务,或允许多任务同时执行,你需要一个线程管理器管理你的线程.ThreadPoolExecutor,会维护一个队列,当它的线程池有空时,从队列里取任务,并执行.要运行任务,你要做的就是把它加到队列里. 线程池可以并联运行一个任务的多个实例,所以你要保存代码线程安全.能被多线程访问的变量需要同步块.更多信息,见Processes and Th

Android中实现图文并茂的按钮实例代码

效果图如下所示: 代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:gravity="center" android:background="#8

Android 中Lambda表达式的使用实例详解

 Android 中Lambda表达式的使用实例详解 Java8 中着实引入了一些非常有特色的功能,如Lambda表达式.streamAPI.接口默认实现等等.Lambda表达式在 Android 中最低兼容到 Android2.3 系统,兼容性还是不错的,Lambda表达式本质上是一种匿名方法,它既没有方法名,也没有访问修饰符和返回值类型,使用它编写的代码将更加简洁易读. 1.Lambda表达式的基本写法 如果想要在 Android 项目中使用 Lambda表达式 或者 Java8 的其他新特

Android开心消消乐代码实例详解

突然想要在android上写一个消消乐的代码,在此之前没有系统地学过java的面向对象,也没有任何android相关知识,不过还是会一点C++.8月初开始搭建环境,在这上面花了相当多的时间,然后看了一些视频和电子书,对android有了一个大概的了解,感觉差不多了的时候就开始写了. 疯狂地查阅各种资料,反反复复了好几天后,也算是写出了个成品.原计划有很多地方还是可以继续写下去的,比如UI设计,比如动画特效,时间设计,关卡设计,以及与数据库的连接,如果可以的话还能写个联网功能,当然因为写到后期内心

Android中创建类似Instagram的渐变背景效果

我在我最近的项目用到这个效果,给大家分享下 https://github.com/zhaoweihaoChina/hnuplus 1. 在drawable文件夹创建一些渐变颜色的资源 color1.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <

Spring boot2.x中集成H2数据库代码实例

这篇文章主要介绍了Spring boot2.x中集成H2数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在spring boot中集成 1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </d

Android中判断网络是否连接实例详解

Android中判断网络是否连接实例详解 在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下: public class ConnectionDetector { private Context _context; public ConnectionDetector(Context context){ this._context = context; } public boolean isConnectingToInternet(){ ConnectivityMana

Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码

Android中可以创建三种对话框.确定取消对话框.单选对话框.多选对话框 android中的确定取消对话框演示示例 Android中使用单选对话框的演示案例 android中使用多选对话框的演示案例 实现代码如下 修改activity_main.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

Android 中对JSON数据解析实例代码

Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&