android broadcast

本文深入探讨了广播在应用程序间传输信息的机制,详细介绍了BroadcastReceiver组件的属性、注册方式、类型及其生命周期,并提供了安全注意事项和应用场景概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:http://blog.csdn.net/zhouli_csdn/article/details/45645743


广播是一种广泛运用的在应用程序之间传输信息的机制 。而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件;BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动Activity 作为响应,或者通过 NotificationMananger 提醒用户,或者启动 Service 等等。

broadcastReceiver属性:

android:enabled="true",只有application和自身的这两个属性都为true,才可以被实例化。

android:exported="true",默认值依据是否有intent filters,有就为true,没有为false。

android:permissino,使用name属性指定权限

权限在manifesst中使用permission声明。例如:(权限声明部分摘录自:http://berdy.iteye.com/blog/1782854)

  1. <permission android:description="string resource"  
  2.             android:icon="drawable resource"  
  3.             android:label="string resource"  
  4.             android:name="string"  
  5.             android:permissionGroup="string"  
  6.             android:protectionLevel=["normal" | "dangerous" |   
  7.                                      "signature" | "signatureOrSystem"] />
android:description :对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果 
android:label: 对权限的一个简短描述 
android:name :权限的唯一标识,一般都是使用 报名加权限名 
android:permissionGroup: 权限所属权限组的名称 
android:protectionLevel: 权限的等级, 
normal 是最低的等级,声明次权限的app,系统会默认授予次权限,不会提示用户 
dangerous  权限对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户 
signature  权限表明的操作只针对使用同一个证书签名的app开放 
signatureOrSystem  与signature类似,只是增加了rom中自带的app的声明 

android:name 属性是必须的,其他的可选,未写的系统会指定默认值


两种注册方法:

系统注册:

< receiver android:name = ".MyBroadcastReceiver" >
           < intent-filter android:priority = "1000" >
		< action android:name = " android.provider.Telephony.SMS_RECEIVED" />
           </ intent-filter >
 </ receiver >

代码注册:

IntentFilter filterB = new IntentFilter();  
        filterB.addAction("sendMyBroadcastReceiverB");  
        MyBroadcastReceiverB myBroadcastReceiverB = new MyBroadcastReceiverB();  
        this.registerReceiver(myBroadcastReceiverB, filterB);


andorid broadcast类型:

sendBroadcast:发送普通广播,广播发送后所有接收者以不同的顺序运行,通常在同一时刻。

在有些情况下,例如那些需要创建一个进程的广播,只有一个会被执行避免系统因为创建进程负载。


sendOrderedBroadcast:一次只有一个广播在执行,可以给下一个广播提供一个结果或者终止广播继续传递。可以通过android:priority控制广播的顺序,相同优先级的广播的执行顺序不确定。


sendStickyBroadcast:粘性广播,发出后系统会保留最后一次发送的intnet,在有广播注册后可以立即收到广播,且会一直存在。(退出发送广播的应用也会存在)

1):相同的intent,系统只会保留最后一次

2):不同的intent,可以一起存在。


安全:

1)确保intent actions和其它的条件是唯一的,否则会冲突

2)使用registerReceiver(BroadcastReceiver, IntentFilter),任何其它应用都可以给它发送广播

3)当你在manifest中注册广播,其它任何应用都可以给它发送广播,使用android:exported="false"阻止。

4)sendBroadcast(Intent),任何其它应用都可以收到广播,可以通过权限控制。从ICE_CREAM_SANDWICH开始,可以设置Intent.setPackage发给一个应用。


使用LocalBroadcastManager不会发生上述问题,因为他不会将intent广播出当前进程

可以使用sendBroadcast(Intent, String)或者sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)指定权限,只有那么在manifest中注册了permission的receiver可以收到广播。


广播生命周期:

一个正在执行广播的onRecieve的方法的进程会被认为是前台进程。一旦从onReveieve返回,就和其他运行在进程中的组件优先级相同。

onReceieve方法:

通常运行在UI线程,除非指定registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)是它运行在其它线程。当广播运行在主线程的时候,不能在onReceieve方法执行超过10s的操作。也不能在里面弹出对话框。


应用场景暂略。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值