首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

海内目前最全面的介绍——Android中的BroadCastReceiver

2012-08-24 
国内目前最全面的介绍——Android中的BroadCastReceiverAndroid中的BroadCastReceiver?????????????????????

国内目前最全面的介绍——Android中的BroadCastReceiver

Android中的BroadCastReceiver??????????????????????????????????????????? ? ? 作者:阿福

?

?

?BroadCastReceiver简介(末尾有源码)

public class MyBroadcastReceiver extends BroadcastReceiver {

?

??? // action名称

??? String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

?

??? public void onReceive(Context context, Intent intent) {

?

?????? if (intent.getAction().equals(SMS_RECEIVED)) {

?????????? // 相关处理:地域变换、电量不足、来电来信;

?????? }

??? }

<receiver android:name=".MyBroadcastReceiver">

?????????? <intent-filter android:priority="1000">

?????????? ??

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

?????????? </intent-filter>

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

// 广播接收者-广播的接收

private BroadcastReceiver myBroadcastReceiver = newBroadcastReceiver() {

?

?????? @Override

?????? public void onReceive(Context context, Intent intent) {

?????????? //相关处理,如收短信,监听电量变化信息

?????? }

?

IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED ");

异步广播, 当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter)还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播.

sendBroadcast(intent);

?

Intent intent = new Intent("cn.lenovo.yangguangf");

<receiver android:name=".MyBroadcastReceiver">

?????????? <intent-filter android:priority="1000">

?????????? ??

<action android:name="cn.lenovo.yangguangfu"/>

</intent-filter>

3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;

???

有序广播的发送和接收:

sendOrderedBroadcast(intent,receiverPermission);

sendOrderedBroadcast(intent,receiverPermission, resultReceiver,

receiverPermission这是权限,一个接收器必须持以接收您的广播。如果为null,不经许可的要求。
resultReceiver您自己BroadcastReceiver来当作最后的广播接收器。
调度自定义处理程序,用以安排resultReceiver回调;如果为null将语境中的主线程举行。
initialCode一种结果代码的初始值。通常为Activity.RESULT_OK。这个值是-1;为其他int型 也可以,如0,1,2;
initialData一种结果数据的初始值。通常情况下为空,是String类型;
initialExtras一种结果额外的初始值。通常情况下为空,是Bundle;

?

sendStickyBroadcast(intent);

当处理完之后的Intent,依然存在,直到你把它去掉。

发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

去掉是用这个方法removeStickyBroadcast(intent);但别忘了在执行这个方法的应用里面AndroidManifest.xml同样要加上面的权限;

?

?

sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,

?????? initialCode, initialData,initialExtras)

这个方法具有有序广播的特性也有异步广播的特性;

?


发送这个广播要:<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />这个权限。才能使用这个方法。如果您并不拥有该权限,将抛出SecurityException的。

?

<receiver android:name=".MyBroadcastReceiver">

?????????? <intent-filter android:priority="900">

?????????? ??

????????????? <action android:name="cn.lenovo.yangguangfu"/>

?????????? </intent-filter>

//代码中注销广播

?

// sendBroadcast(intent);

// sendBroadcast(intent,receiverPermission);

//sendOrderedBroadcast(intent, receiverPermission);

//sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,

// initialCode, initialData,initialExtras)

//sendOrderedBroadcast(intent, receiverPermission, resultReceiver,

得到由

sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,

// initialCode, initialData,initialExtras);

?

//sendOrderedBroadcast(intent, receiverPermission, resultReceiver,

sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,

?initialCode, initialData, initialExtras)


谢谢 3 楼 lenovo123 2011-09-20   为啥建议在onResume()中注册和在onPuase()中注销还是没看懂 4 楼 yangguangfu 2012-01-18   lenovo123 写道为啥建议在onResume()中注册和在onPuase()中注销还是没看懂
其实还是在onCreate(),注册比较好。 5 楼 androidev888 2012-02-17   谢谢分享! 6 楼 woyaowenzi 2012-05-07   yangguangfu 写道lenovo123 写道为啥建议在onResume()中注册和在onPuase()中注销还是没看懂
其实还是在onCreate(),注册比较好。
我也觉得在onCreate()中注册比较好,在onDestory中进行销毁。

热点排行
Bad Request.