Android广播之九——拦截短信

1、本文件内容,怎样屏蔽特定电话的短信,后面的例是屏蔽了电话为13693490547的短信,即让手机收不到手机号为13693490547的手机发来的短信。

2、手机收到短信以之后在通知栏上面得到一栏通知显示短信的内容的过程是这样的: (1)收到短信(2)系统发出短信有序广播,并且把电话号码和短信内容使用数据加入一起发送(3)系统自带的短信广播接收器监听到短信有序广播(4)广播接收器中的onReceive函数被调用,把广播中的内容(包含电话号码和短信内容)取出作为通知内容,发出通知(notification)

3、使用有序广播的知识点可以中断广播继续往后面传,而手机收到短信以后产生的广播,是一个有序广播,所以要想屏蔽电话13693490547为的短信,我们可以做以下几点:(1)自做一个监听短信广播的接收器监听短信广播。(2)配置接收器时,把监听优先级配置得比系统监听短信广播接收器的优先级更高(3)在自定义的接收器的onCreate函数中先取出电话号码,判断号码是否为13693490547,如果不是,则什么也别做,如果是,则调用BroadcastReceiver类中的abortBroadcast函数中断广播,这样系统监听短信的广播就监听不到了。

4、举例: 以下的例子在手机上安装后,手机就收不到13693490547手机的短信了。
(1)自定义广播监听器类
package com.fs.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class MSGBroadcastReceiver extends BroadcastReceiver {
       @Override
       public void onReceive(Context context, Intent intent) {
              // 取出监听到的短信的电话号码
             String phone = this.getInf(intent);
             //如果收到的短信的电话号码为13693490547,则中断广播,让手机收不到该电话号码的短信
             if ("13693490547".equals(phone)) {
                       this.abortBroadcast();//中断广播
             }
      }

 // 取出监听到的短信的电话号码
 private String getInf(Intent intent) {
         if (intent.getAction() .equals("android.provider.Telephony.SMS_RECEIVED")) { /* 创建字符串变量sb */
               /** 接收由Intent传来的数据 */
               String phone = null;
               Bundle bundle = intent.getExtras();
               /** 判断Intent有无数据 */
              if (bundle != null) {
                     /**pdus为 android内置短信参数 identifier 通过bundle.get("")返回一包含pdus对象*/
                     Object[] myOBJpdus = (Object[]) bundle.get("pdus");
                     /* 构建短信对象array,并根据收到的对象长度来定义array的大小 */
                     SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
                      for (int i = 0; i < messages.length; i++) {
                               messages[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);
                      }
                     /* 把传来的短信合并定义在stringbuffer中 */
                      for (SmsMessage currentMessage : messages) {
                                /* 发送人电话号码 */
                               phone = currentMessage.getDisplayOriginatingAddress();
                       }
                 }
                 /* 以(Toase)形式展示 */
                return phone;
           }
          return null;
    }
}
(2)在AndroidManifest.xml中配置自定义的接收器
<?xml version="1.0" encoding="utf-8"?>
<manifest ......>
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  ......
  <receiver android:name="com.fs.receiver.MSGBroadcastReceiver">
   <!--把该接收器的优先级设置为1000,大于系统自带监听短信广播的广播接收器-->
   <intent-filter android:priority="1000"> 
    <!--短信的类型为:android.provider.Telephony.SMS_RECEIVED-->
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
   </intent-filter>
  </receiver>
 </application>
 ......
 <!--配置与短信相关的权限-->
 <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>
(完)

 

 

 


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值