休假期间整理的资料,部分参考网上内容。

android中,通过广播(broadcast)可以通知其他广播接受者某个事件发生了。比如电源强度,信号强度等。

Broadcast机制是基于一种注册方式的,Broadcast Receiver将其特征描述并注册在系统中。根据注册时机,可以分为两类,网上有人称之为静态注册和动态注册。

静态注册,就是Broadcast Receiver的相关信息写在配置文件中,系统会负责在相关事件发生的时候及时通知到该Broadcast Receiver。这种模式适合于这样的场景:某事件发生

-> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶

属于这种模式。 这个方式实现如下:

1)接收广播

Public class MyBroadcastReceiver extends BroadcastReceiver {

Public void onReceive(Context context, Intene intent){

// TODO

}

}

2)发送广播

Intent it = new Intent(NEW_BROADCAST_FILTER);

sendBroadcast(it);

3)配置广播

receiveraction中定义了该receiver能够接受的广播,Manifest.xml定义部分:

<receiver android:name=”.MyBroadcastReceiver”>

<intent-filter>

<action android:name= NEW_BROADCAST_FILTER />

</intent-filter>

</receiver>

动态注册,注册这样的事情都是由应用自己来处理的,通常是在OnResume

件中通过registerReceiver进行注册,在OnPause等事件中通过unregisterReceiver取消注

册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,判断网络变化,有些应用会在运行期间关注网络状况变化的需求,使其可以在有网络的时候优先使用网络,在其他情况下,首先通过本地数据。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用 -> 监听事件 -> 发生时进行处理。 动态注册广播方式如下:

(1) 声明一个BroadcastReceiver

BroadcastReceiver mReceiver=new BroadcastReceiver(){

Public void onReceive(Context context,Intent intent){

//收到Broadcast会跑到这里

}

}

(2) OnResume时,通过registerReceiver注册。

IntentFilter mfilter=new IntentFilter();

mfilter.addAction(NEW_BROADCAST_FILTER);

registerReceiver(mReceiver,mfilter);

3OnPause时,通过unregisterReceiver反注册。

unregisterReceiver(mReceiver);

android中发送广播有两种方式,Context.sendBroadcastContext.sendOrderedBroadcast,前者发出的称为Normal broadcast,所有关注该消息的Receiver,都有机会获得并进行处理;后者放出的称作Ordered broadcasts,顾名思义,接受者需要按资排辈,排在后面的能否收到广播,需要看前面的处理方式,如果前面的Receiver阻止了这个消息继续广播,排在后面的就不会在接收到这个广播,短信广播就是Ordered broadcasts

<receiver android:name=".SmsReceiver">

<intent-filter android:priority="1999">

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

</intent-filter>

</receiver>

Ordered broadcasts根据priority值确定优先级,值越大优先级越高,如果你的短信程序中priority最大,接收到短息广播后阻止了其继续广播,就达到了拦截短信的效果。

最后需要注意的是,当Broadcast Receiver接收到相关的消息,在OnReceive中不要执行很消耗时间(通常不大于5秒)的操作,通常把消耗时间的操作放到一个Service中,在OnReceive中启动该Service

http://www.devdiv.com/home.php?mod=space&uid=14682&do=blog&id=3776

更多相关文章

  1. Android(安卓)AppShortcuts 桌面启动图标长安弹出框 类似支付宝
  2. Android(安卓)源码详解:View的事件分发机制
  3. 手机管理应用研究【2】—— 安装卸载篇
  4. android解析xml文件的方式(其三)
  5. Android回弹阻尼效果的简单实现,非基于ListView,ScrollView
  6. 安卓自定义View进阶-多点触控详解
  7. Android(安卓)BLE基础框架使用详解
  8. Android中WebView点击事件的拦截跳转到原生的界面
  9. android:TextView中的文本链接之--链接的几种方式

随机推荐

  1. 安卓第三次作业
  2. Android Studio报错 (androidx.recyclerv
  3. android studio编译aidl文件出现问题
  4. Java获取文件的类型(扩展名)
  5. android中怎样获取IP地址
  6. Android 绑定远程Service(此Service开启
  7. Github Actions Android CI打包配置
  8. Android RadioButton class three kinds
  9. Android 混淆去掉log无效 assumenosideef
  10. Python基础——列表、元组、字典