看到Android中有关Broadcast Receiver组件方面的东西,广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,***传给C 。优先级别声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置 。有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。

Context.sendBroadcast() 发送的是普通广播,所有订阅者都有机会获得并进行处理。

Context.sendOrderedBroadcast() 发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将数据通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。

系统收到短信,发出的广播属于有序广播。如果想阻止用户收到短信,可以通过设置优先级,让你们自定义的接收者先获取到广播,然后终止广播,这样用户就接收不到短信了。

因此,可以用广播来实现一个黑名单的功能:

package com.broadcastreceiver;

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 FirstBroadCastReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){

Bundlebundle=intent.getExtras();

StringBuilderphoneNum=newStringBuilder();

//通过pdus可以获得接收到的所有信息

Object[]objArray= (Object[]) bundle.get("pdus");

//构建短信对象array,并依据收到的对象长度来创建array的大小

SmsMessage[]messages=newSmsMessage[objArray.length];

for (inti=0; i

{

messages[i] = SmsMessage

.createFromPdu((byte[]) objArray[i]);

}

//将送来的短信合并自定义信息于StringBuilder中

for (SmsMessage currentMessage : messages)

{

//获得发送短信的电话号码

phoneNum.append(currentMessage.getDisplayOriginatingAddress());

}

//这里可以添加数据库查询语句,用来查询发送短信的号码是否在黑名单中

//注意,在onReceive()方法最长运行时间是10秒,如果超过10秒Android会认为该程序无响应

//所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框

//如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成

//这里不能使用子线程来解决,因为 BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了

//BroadcastReceiver一旦结束,此时BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死,

//因为它属于空进程(没有任何活动组件的进程)。如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。

//所以采用子线程来解决是不可靠的。

if(phoneNum.toString().equals("254")){

//如果在黑名单中,就终止广播,这样,系统就不会有任何提示,用户也就收不到短信了

abortBroadcast();

Log.e("msg", "sucess!!");

}else

Log.e("msg","fail!");

}

}

}

既然要获取短信号码,就涉及到读短信的权限,同时intent-filter元素的android:priority属性表示优先级,越大说明优先级越高。

下面是AndroidManifest.xml代码:

package="com.broadcastreceiver"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

【编辑推荐】

【责任编辑:李程站 TEL:(010)68476606】

点赞 0

android 坚挺通话广播_关于短信黑名单 BroadCast相关推荐

  1. android 坚挺通话广播_安卓版本最新占比 Android 4.4很坚挺

    原标题:安卓版本最新占比 Android 4.4很坚挺 又到了每月一次的统计安卓版本占比时间.根据这份2016年12月发布的最新数据,发布于2010年5月的Android 2.2系统,其市场占比已经低 ...

  2. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容

    在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...

  3. 关于短信黑名单 BroadCast

    2011-06-02 10:52 佚名 开发者社区 我要评论(0) 字号:T | T BroadCast Receiver顾名思义是指广播接受者,它和时间处理机制类似,只不过事件吃力机制是程序组件级别 ...

  4. android 坚挺通话广播_Android智能机 摩托罗拉MileStone坚挺

    (中关村在线手机频道行情报道)2010年11月29日,摩托罗拉MileStone(改版机)在商家"中关村特价手机网"的最新报价是2350元,售价依旧坚挺,配件有:单电单充.耳机.数 ...

  5. android学习笔记---37_采用广播接收者实现系统短信操作_获取短信_收发短信等

    37_采用广播接收者实现短信操作 1.       原理:当系统接收到短信时候,会发出一个广播Intent,Intent的action名称为android.provider.Telephony.SMS ...

  6. Android短信的发送和广播接收者实现短信的监听

    Android短信的发送和广播接收者实现短信的监听  要注意Android清单中权限的设置以及广播的注册监听实现 以下就是 Android清单的XML AndroidManifest.xml < ...

  7. Android 短信模块分析(四) MMS之短信的发送与接收

     MMS之短信的发送与接收分析: 一.信息发送: com.android.mms.data.WorkingMessage.java 类 send()函数: public void send() { . ...

  8. Android从普通发送和接收短信到对短信进行拦截

    概述: 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西.那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Andro ...

  9. android app 短信接收,Android创建简单发送和接收短信应用

    本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下 一.接收短信 项目的结构如下:一个简单的接收和发送短信的功能 1.定义一个接收短信的广播:当手机接收到 ...

最新文章

  1. 问得最多的十个JavaScript前端面试问题
  2. Spring boot的Spring MVC自动配置原理
  3. 异常处理——Another app is currently holding the yum lock
  4. linux 密码策略设置,设置Linux密码策略
  5. 技术分享连载(八十九)
  6. GPLT-天梯赛-题解目录
  7. Python字符串isdigit()
  8. Linux下Qt使用QAudio相关类进行音频采集,使用Windows下的Matlab软件播放
  9. 来自微信团队的6个开源项目
  10. unity2020 package 下载位置
  11. OpenDrive地图格式解析——案例分析
  12. 转载:SyncToy安装使用详解
  13. 树莓派远程连接工具VNC使用教程
  14. PostgreSQL开发规范
  15. 什么是2.5D 点云?
  16. IDEA自动把数据库表映射为实体类
  17. [33期] 我的编程思想【本文内容不涉及任何说教,纯属个人感受,不爽跳过】
  18. 字节跳动(今日头条)推荐算法实习生面试
  19. 继 QQ 被曝扫描浏览器历史记录之后,微信也被曝出会扫描所有 Chromium cookies
  20. 做题中遇到的各种密码整理记录

热门文章

  1. Oracle的权限角色及用户
  2. DOM、Window操作
  3. 单调队列练习之广告印刷
  4. Jquery 中each循环嵌套的使用示例教程
  5. eclipse,myeclipse,Tomcat进行JSP开发配置
  6. 中国队新主帅朱广沪印象
  7. Linux/Android之perf追内存泄漏工具(api级别)
  8. Linux glib命令行解析GOptionEntry使用
  9. pulseaudio数据流框图
  10. arm和thumb指令模式