Android总结六(BroadcastReceiver)

一、接收广播消息

  1.什么是BroadcastReceiver?

    BroadcastReceiver是Android系统四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息。

  2.怎样创建BroadcastReceiver?

    1)创建一个类继承自BroadcastReceiver类;

    2)在AndroidManifest.xml配置<receiver>节点信息。

  3.一旦实现了BroadcastReceiver,接下来就应该制定该BroadcastReceiver能匹配的Intent,此时有两种方式。

    1)在AndroidManifest.xml文件中配置,这种方式会一直监听。例如如下代码:

        <receiver android:name="com.gnnuit.smsreceiver.SmsReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    2)使用代码进行指定,调用BroadcastReceiver的Context的registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定,这种方式可以通过unregisterReceiver(BroadcastReceiver receiver)取消监听,也叫临时监听。例如如下代码:

     IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(new SmsReceiver(), filter);

  4.如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法里执行一些耗时的操作,否则会发生ANR异常。如果确实需要根据Broadcast来完成一些耗时的操作,则可以考虑通过Intent启动一个Service来完成该操作。不应考虑使用新线程去完成耗时操作,因为Broadcast本身的生命周期很短。

  5.Broadcast被分为如下两种:

    1)Normal Broadcast(普通广播):普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。

    2)Ordered Broadcast(有序广播):有序广播的接收者将按预先声明的优先级依次接收Broadcast。优先级别声明在<intent-filter/>元素的android:priority属性中,数越大优先级别越高,取值范围为-1000-1000.有序广播可以调用abortBroadcast()方法终止Broadcast Intent的传播,Broadcast Intent的传播一旦终止,后面的接收者就无法接收到Broadcast。

  6.用于发送广播的两个方法:

    1)sendBroadcast():发送普通广播。

    2)sendOrderedBroadcast():发送有序广播。

  7.短信拦截实例

SmsReceiver.java

package com.gnnuit.smsreceiver;

import java.util.Date;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

    // 当接收到短信时被触发
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("接收到短信!!!");
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");// 通过pdus可以获得接收到的所有短信消息
        for (Object pdu : pdus) {
            SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);
            String content = message.getMessageBody();// 获得短信内容
            String number = message.getOriginatingAddress();// 获得短信号码
            Date date = new Date(message.getTimestampMillis());// 获得短信日期
            System.out.println(number + "," + content + "," + date);
            if ("110".equals(number)) {
                abortBroadcast();// 取消广播,让系统收不到短信
            }
        }
    }

}

AndroidManifest.xml

     <receiver android:name="com.gnnuit.smsreceiver.SmsReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

Android总结六(BroadcastReceiver)

时间: 2024-10-02 20:25:20

Android总结六(BroadcastReceiver)的相关文章

Android第六期 - ViewPage与菜单栏本地页面监听滑动效果

首先是JiaoyuzixunActivity.java代码部分: package com.gaoxiaotong.ctone.jiaoyuzixun; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONO

Android 广播接收者 BroadcastReceiver

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通信方式,可以使用的场景如下:1.同一app内部的同一组件内的消息通信(单个或多个线程之间): 2.同一app内部的不同组件之间的消息通信(单个进程): 3.同一app具有多个进程的不同组件之间的消息通信: 4.不同app之间的组件之间消息通信: 5.Android系统在特定情况下与App之间的消息通信. 从实现原理看上,Andro

Android面试,BroadCastReceiver的两种注册方式的异同

在Android手机应用程序中开发中,需要用到BroadcastReceiver来监听广播的消息.在自定义好BroadcastReceiver ,需要对其进行注册,注册有两种方法: 一种是在代码当中注册,注册的方法是registerReceiver(receiver,filter)(用Activity的实例来调用),取消注册的方法:unregisterReceiver(receiver),如果一个BroadcastReceiver用于更新UI(User Interface),那么通常会使用这种方

Android笔记六.深入理解Intent和IntentFilter(二)

深入理解Intent和IntentFiler(二) Jiangdg_VIP http://blog.csdn.net/u012637501 在上一篇文章中,我们比较详细学习了"Intent"的相关知识,现在将学习如何设置Intent对象的这些属性以及如何使用他们来启动组件.Intent对象是一组信息,我们可以通过设置其Action.Data.Category属性来指定启动哪个组件并完成什么样的动作(包含动作所需的数据). "意图"分为显示intent和隐式inten

Android开发之BroadcastReceiver详解

BroadcastReceiver,顾名思义就是"广播接收者"的意思,它是Android四大基本组件之一,这种组件本质上是一种全局的监听器,用于监听系统全局的广播消息.它可以接收来自系统和应用的的广播. 由于BroadcastReceiver是一种全局的监听器,因此它可以非常方便地实现系统不同组件之间的通信.比如Activity与通过startService()方法启动的Service之间通信,就可以借助于BroadcastReceiver来实现. BroadcastReceiver简

Android组件系列----BroadcastReceiver广播接收器

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3960623.html 联系方式:[email protected] [正文] 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码.广播对象被构造出

Android开发之BroadcastReceiver的使用

1.静态注册. 在manifest中注册. 1 <receiver android:name="com.exce.learnbroadcastreceiver.MyReceiver"></receiver> 然后在activity中使用sendBroadcast(Intent)方法.其中参数是Intent. 1 Intent intent=new Intent(this,MyReceiver.class); 2 intent.putExtra("dat

Android开发之BroadCastReceiver

创建广播接收者:只需新建一个类继承自BroadcastReceiver,然后重写onReceive方法 注册广播的方式有两种: 1.静态注册:即在清单文件中注册,例如下面监听打电话的广播: <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL"

android笔记:BroadcastReceiver

android允许应用程序自由地发送和接收广播. 广播是通过Intent进行数据传递的.接收广播则通过Broadcast Receiver(广播接收器)实现. 广播分为:标准广播和有序广播. 标准广播:一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言. 有序广播:广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了.