拦截短信有几个关键点:

1.android接收短信时是以广播的方式

2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限

  1. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

3.要写个广播接收类

  1. public class smsreceiveandmask extends BroadcastReceiver {
  2. private String TAG = "smsreceiveandmask";
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. }

4.Manifest.xml的receiver标签里要加入intent-filter ,action为

  1. <action android:name="android.provider.Telephony.SMS_RECEIVED" />

5.重要的是要在这个intent-filter上加上priority优先级,以使自己接收到SMS优先于系统或其它软件

  1. <receiver android:name=".smsreceiveandmask" >
  2. <intent-filter android:priority="1000">
  3. <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  4. </intent-filter>
  5. </receiver>

6.当自己的程序接收到要屏蔽的SMS后,用 this.abortBroadcast();来结束广播的继续发给别的程序,这样系统就不会收到短信广播了,Notification也不会有提示了

  1. // 第三步:取消
  2. if (flags_filter) {
  3. this.abortBroadcast();
  4. }

源码如下:

Manifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.hwttnet.test.smsreceiveandmask" android:versionCode="1"
  4. android:versionName="1.0">
  5. <uses-sdk android:minSdkVersion="3" />
  6. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
  7. <application android:icon="@drawable/icon" android:label="@string/app_name">
  8. <receiver android:name=".smsreceiveandmask" >
  9. <intent-filter android:priority="1000">
  10. <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  11. </intent-filter>
  12. </receiver>
  13. </application>
  14. </manifest>

BroadcastReceiver类:

 
  1. package com.hwttnet.test.smsreceiveandmask;
  2. import android.app.Activity;
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.telephony.SmsMessage;
  8. import android.util.Log;
  9. public class smsreceiveandmask extends BroadcastReceiver {
  10. private String TAG = "smsreceiveandmask";
  11. @Override
  12. public void onReceive(Context context, Intent intent) {
  13. Log.v(TAG, ">>>>>>>onReceive start");
  14. // 第一步、获取短信的内容和发件人
  15. StringBuilder body = new StringBuilder();// 短信内容
  16. StringBuilder number = new StringBuilder();// 短信发件人
  17. Bundle bundle = intent.getExtras();
  18. if (bundle != null) {
  19. Object[] _pdus = (Object[]) bundle.get("pdus");
  20. SmsMessage[] message = new SmsMessage[_pdus.length];
  21. for (int i = 0; i < _pdus.length; i++) {
  22. message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
  23. }
  24. for (SmsMessage currentMessage : message) {
  25. body.append(currentMessage.getDisplayMessageBody());
  26. number.append(currentMessage.getDisplayOriginatingAddress());
  27. }
  28. String smsBody = body.toString();
  29. String smsNumber = number.toString();
  30. if (smsNumber.contains("+86")) {
  31. smsNumber = smsNumber.substring(3);
  32. }
  33. // 第二步:确认该短信内容是否满足过滤条件
  34. boolean flags_filter = false;
  35. if (smsNumber.equals("10086")) {// 屏蔽10086发来的短信
  36. flags_filter = true;
  37. Log.v(TAG, "sms_number.equals(10086)");
  38. }
  39. // 第三步:取消
  40. if (flags_filter) {
  41. this.abortBroadcast();
  42. }
  43. }
  44. Log.v(TAG, ">>>>>>>onReceive end");
  45. }
  46. }

android拦截短信并屏蔽系统的Notification的更多相关文章

  1. 对于android拦截短信的一些疑问

    最近折腾android4.4短信拦截的问题,要求在app上收到短信的时候弹出提示,并显示的功能. 然后找到了使用broadcastreceiver和contentprovider两种方法,那么问题来了 ...

  2. Android获取短信验证码

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  3. Android接收短信

    Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver ...

  4. android 发送短信的两种方式,以及接收报告和发送报告

               android发送短信,以及接收报告和发送报告          android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:    一.调起系统发短信功能    ...

  5. android 发送短信 怎样做到一条一条的发送,仅仅有在上一条发送成功之后才发送下一条短信

    android发送短信截获上一条发送是否成功,然后再来发送下一条短信 1.问题:在项目中遇到例如以下要求:待发短信有N条,实现一条一条的发送并在上一条短信发送成功之后再来发送下一条. for(int ...

  6. android 获取短信验证码倒计时

    android 获取短信验证码倒计时 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2xlbGUxMzE0/font/5a6L5L2T/fonts ...

  7. Android之——短信的备份与还原

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...

  8. 用Tasker实现收到Android手机短信自动转发到邮箱

    发送短信到邮箱的原理与 <用Tasker实现收到Android手机短信自动转发到邮箱>有些类似.  发送短信到邮箱是利用Ifttt这个服务将短信转发到邮箱中.Ifttt服务的可扩展性很强, ...

  9. android之短信拦截器

    下面通过短信拦截器来介绍短信中的广播 布局文件 在布局文件中可以设置需要拦截的号码 <?xml version="1.0" encoding="utf-8" ...

随机推荐

  1. android让你的TabHost滑动起来

    在Android应用中,一般TabActivity和若干个Tab选项卡(TabWidget).如果选项卡的数量超过了5个,就不适合放到一个屏幕中,这样可以让这些选项卡滑动起来. 滑动的选项卡的实现有好 ...

  2. Android中获取应用程序(包)的信息----PackageManager

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:   第一部分: 获取应用程序的packagena ...

  3. HDU5790 Prefix 字典树+主席树

    分析:这个题和spoj的d_query是一个题,那个是求一段区间里有多少个不同的数字,这里是统计有多少个不同的前缀 用字典树进行判重,(和查询不同的数字一样)对于每个不同的前缀,只保留它最后一次出现的 ...

  4. linux常用命令之--目录与文件的操作命令

    1.linux的目录与文件的增.删.改.复制 pwd:用于显示当前所在的目录 ls:用于显示指定目录下的内容 其命令格式如下: ls [-option] [file] 常用参数: -l:显示文件和目录 ...

  5. <转>配置DNS辅助服务器:DNS系列之四

    配置DNS辅助服务器   在前面的博文中,我们介绍了如何在DNS服务器中创建常用的DNS记录,本文中我们要为大家介绍如何配置DNS的辅助服务器,同时也要介绍一下和辅助区域类似的存根区域. DNS辅助服 ...

  6. android studio 中获取sha1

    使用keytool 一.配置环境变量 由于要用到keytool工具,而keytool是jdk里的一个工具,首先将jdk/bin所在的目录加到环境变量的PATH中 看我的keytool所在位置 将所在路 ...

  7. LeetCode题解——Roman to Integer

    题目: 将罗马数字转换为整数. 解法: 可以参考上一篇数字转换为罗马数字的规则. 代码: class Solution { public: int sym2int(char sym) //罗马数字字符 ...

  8. 生成chm文档工具- Sandcastle -摘自网络

    Sandcastle是微软官方的文档生成工具,NDoc开发停止后,这个貌似也是唯一的一个这方面的工具.它从dll文件及其xml注释文件能够 生成完整的帮助文档,支持多种生成格式(Helpe1x:chm ...

  9. CoffeeScript学习(2)—— 变量

    变量基础 对于变量的定义的话,形式如下所示 xxx = yyy ------编译后------ var xxx = yyy; 保留字 我们知道,在原生js中的保留字是不能作为变量名或者属性名的.如果我 ...

  10. (转)关于CoreData的一个工具Mogenerator的使用

    最近看到用CoreData时使用的工具Mogenerator,发现网上介绍其具体使用的不多,特此简单整理一下,关于CoreData这里就不具体说了,使用就用MagicalRecord,用起来真是太方便 ...