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

本文实例讲述了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
notification 屏蔽、怎么屏蔽腾讯拦截检测、网页广告怎么拦截屏蔽、网站防屏蔽拦截、过qq管家拦截屏蔽代码,以便于您获取更多的相关知识。

时间: 2024-10-01 02:48:03

Android编程实现拦截短信并屏蔽系统Notification的方法_Android的相关文章

短信拦截-android BroadcastReceiver中拦截短信后如何给回调activity

问题描述 android BroadcastReceiver中拦截短信后如何给回调activity (4.3之前的)应该是调用接口,但具体的回调接口不清楚,也不清楚如何自动刷新 解决方案 Android-拦截短信(BroadcastReceiver)Android手机短信拦截---BroadcastReceiver(一) 解决方案二: // 注册接收.监听短信receiver smsReceiver = new SMSReceiver(); IntentFilter receiverFilter

Android编程实现的短信编辑器功能示例

本文实例讲述了Android编程实现的短信编辑器功能.分享给大家供大家参考,具体如下: 修改短信数据库,从而生成任意手机号发送的短信. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ex

Android API开发之SMS短信服务处理和获取联系人的方法_Android

本文实例讲述了Android API开发之SMS短信服务处理和获取联系人的方法.分享给大家供大家参考,具体如下: Android API支持开发可以发送和接收SMS消息的应用程序.目前我们开发过程中使用的Android模拟器还不支持发送SMS,但它可以接收SMS.现在我们来探索一下Android对SMS的支持,我们将会构建一个小小的应用程序来监听移动设备(或模拟器)上接收到的SMS消息,并将它显示出来. 我们来定义一个Intent接收器来处理SMS接收事件: package com.wissen

Android编程之SMS读取短信并保存到SQLite的方法_Android

本文实例讲述了Android编程之SMS读取短信并保存到SQLite的方法.分享给大家供大家参考,具体如下: Android 之 SMS 短信在Android系统中是保存在SQLite数据库中的,但不让其它程序访问(Android系统的安全机制) 现在我们在读取手机内的SMS短信,先保存在我们自己定义的SQLite数据库中,然后读取SQLite数据库提取短信,并显示 SMS短信SQLite存取代码: package com.homer.sms; import java.sql.Date; imp

Android编程实现禁止系统锁屏与解锁亮屏的方法_Android

本文实例讲述了Android编程实现禁止系统锁屏与解锁亮屏的方法.分享给大家供大家参考,具体如下: 需求: 某个时刻任务执行完毕,关闭屏幕,某时刻再开启屏幕继续执行任务 通常情况下,不设置屏幕常亮,系统会自动锁屏,锁屏后不能从代码解锁(疑问),所以我的做法是只让系统关闭屏幕,但不锁屏! WakeLock lock, unLock; KeyguardManager km; KeyguardLock kl; unLock = pm.newWakeLock(PowerManager.ACQUIRE_C

Android编程滑动效果之Gallery仿图像集浏览实现方法_Android

本文实例讲述了Android编程滑动效果之Gallery仿图像集浏览实现方法.分享给大家供大家参考,具体如下: Android系统自带一个Gallery浏览图片的应用,通过手指拖动时能够非常流畅的显示图片,用户交互和体验都很好. 本示例就是通过Gallery和自定义的View,模仿实现一个仿Gallery图像集的图片浏览效果.效果图如下: 1.基本原理 在 Activity 中实现 OnGestureListener 的接口 onFling() 手势事件,通过自定义的 View 绘制draw()

Android编程将Activity背景设置为墙纸的简单实现方法_Android

本文实例讲述了Android编程将Activity背景设置为墙纸的简单实现方法.分享给大家供大家参考,具体如下: 1)代码方式 Drawable wallPaper = WallpaperManager.getInstance( this).getDrawable(); this.getWindow().setBackgroundDrawable(wallPaper); 2)XML配置 在该Activity的配置中,加上: 复制代码 代码如下: android:theme = "@android

Android编程开发之TextView单击链接弹出Activity的方法_Android

本文实例讲述了Android编程开发之TextView单击链接弹出Activity的方法.分享给大家供大家参考,具体如下: 话不多说直接上码: 核心源码: package com.example.textview4; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.SpannableString; import android.tex

Android编程实现控件不同状态文字显示不同颜色的方法_Android

本文实例讲述了Android编程实现控件不同状态文字显示不同颜色的方法.分享给大家供大家参考,具体如下: 方式一: 第一要选择的控件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/close_time_display" android:layout_marginRight="20