【android Broadcast】安全性~

       在android系统中sendBroadcast和BroadcastReceiver。只要BroadcastReceiver指定的action和sendBroadcast action一致就可以就行消息接收。但是我们有这样的需求即我发送的广播不允许所有应用都可以接收广播消息,而是要经过发送者允许的才可以。比如某一个产品簇,每一个产品发送的广播消息只允许本簇内的产品才允许接收消息。其它应用即使action一样,也无法接收消息。这样就大大的提供了产品的安全性。那么如何实现呢?本文主要目的就是于此。

方法一:只允许本应用内允许接收。

解决方案:LocalBroadcastManager (局部广播)

优点:

1. 因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。

2. 不用担心别的应用伪造广播,造成安全隐患。

3. 相比在系统内发送全局广播,它更高效。

缺点:

1. 它只能够在同一个进程使用,如果本应用是多进程的。必须保证发送者和接收者是在同一个进程内

2. 它只能够动态注册和取消。

使用实例:

LocalBroadcastManager lbManager = LocalBroadcastManager.getInstance(this);
lbManager.registerReceiver(mReceiver, inFilter);

/**
		 * 方法一
		 * 获得LocalBroadcastManger实例,本应用进程内有效
		 */
		Intent cintent = new Intent();
		cintent.setAction("test");
		lbManager.sendBroadcast(cintent);

ps:这个方法要有support-v4.jar包才行

方法二、指定某一个应用允许接收。

解决方案:intent 指定包名Intent.setPackage设置广播仅对相同包名的有效

优点:

1.支持跨进程

2.receiver可以是静态注册也可以是动态注册。

3.只有指定的包名的应用程序才能够接收到数据,所以安全性较高。

缺点:

1.如果一旦反编译,很容易伪造广播,造成安全隐患

2.在系统内发生全局广播,它效率较低

3.它只能够满足一个应用的需求,不能够同时指定多个

使用实例:

/**
		 * 方法二
		 * 指定包名
		 */
		Intent mIntent = new Intent();
		mIntent.setPackage("com.android.systemUI");
		mIntent.setAction("com.method.two");
		sendBroadcast(mIntent);

方法三、指定某一个receiver允许接收。

解决方案:intent 指定包名Intent. setComponent设置广播仅对相同包名的有效

优点:

1.可以指定到具体某一个receiver,安全性更高

2.receiver可以是静态注册也可以是动态注册。

缺点:

1.它只能指定一个receiver,局限性较大

使用实例:

/**
		 * 方法三
		 * 指定receiver
		 */
		Intent rIntent = new Intent();
		mIntent.setComponent(new ComponentName("com.android.systemUI", "com.android.systemUI.MyReceiver"));
		mIntent.setAction("com.method.three");
		sendBroadcast(rIntent);

方法四、指定多个应用有权接收。

解决方案:sendBroadcast(Intent, String)的接口在发送广播时指定接收者必须具备的permission。如果担心反编译后,权限被窃取,限制失效。可以在声明权限时,提高权限的

leverl为签名验证,即只有相同签名的应用且有该权限才能够接收,这样就能够满足产品簇的问题。

使用实例:

<permission android:description="@string/ttt" 
                   android:label="XXXX" 
	 			   android:name=" com.method.permission" 
			       android:protectionLevel=" signature"/>
<receiver
		    android:name="XXXX"
		    android:permission="com.method.permission" >
		    <intent-filter>
		        <action android:name ="*******" />
		    </intent-filter>
		</receiver>
/**
		 * 方法四
		 * 指定权限的
		 */
		Intent fIntent = new Intent();
		mIntent.setAction("com.method.whatever");
		sendBroadcast(fIntent, "com.method.permission");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值