Android 正在测试BroadcastReceiver未接收受保护的广播
我将尽可能地概述这个场景。主要问题是:我如何动态声明两个接收器,它们都接收相同的广播,但只有一个具有正确的接收权限?在我的测试中,到目前为止,两个接收器都获得广播,因为我的应用程序持有声明的权限,而不仅仅是一个 在应用程序A中,我正在发送一个广播,我正在使用我定义的新权限保护该广播 在应用程序B中,我希望确保来自应用程序A的广播实际上受到保护。因此,我为相同的Android 正在测试BroadcastReceiver未接收受保护的广播,android,broadcastreceiver,android-broadcast,Android,Broadcastreceiver,Android Broadcast,我将尽可能地概述这个场景。主要问题是:我如何动态声明两个接收器,它们都接收相同的广播,但只有一个具有正确的接收权限?在我的测试中,到目前为止,两个接收器都获得广播,因为我的应用程序持有声明的权限,而不仅仅是一个 在应用程序A中,我正在发送一个广播,我正在使用我定义的新权限保护该广播 在应用程序B中,我希望确保来自应用程序A的广播实际上受到保护。因此,我为相同的IntentFilter动态声明了两个接收者,一个拥有新权限,另一个没有。然而,在应用程序B的清单中,我当然声明 然而,两个接收者都得到了
IntentFilter
动态声明了两个接收者,一个拥有新权限,另一个没有。然而,在应用程序B的清单中,我当然声明
然而,两个接收者都得到了许可,而不仅仅是持有许可的接收者。我假设这是因为应用程序B本身被声明使用该权限。这是我的密码:
应用程序A清单:
<permission
android:name="com.my.custom.permission"
android:label="my_permission"
android:protectionLevel="signature" />
<uses-permission android:name="com.my.custom.permission" />
应用程序B清单:
<permission
android:name="com.my.custom.permission"
android:label="my_permission"
android:protectionLevel="signature" />
<uses-permission android:name="com.my.custom.permission" />
流量:
start()
方法BroadcastReceiver
s都被调用End()
方法结束测试有什么想法吗?意识到我的错误在哪里。权限是在应用程序级别授予的,而不是在组件级别授予的。根据Android文档: 要在发送时强制执行权限,请向
sendBroadcast(Intent,String)
或sendOrderedBroadcast(Intent,String,BroadcastReceiver,android.os.Handler,int,String,Bundle)
提供非空权限参数。只有被授予此权限的接收者(通过在其AndroidManifest.xml中使用标记请求)才能接收广播
(来源:)
以及:
意图的发送方可以验证接收方是否具有权限,并通过方法调用指定非空权限。只有具有该权限的应用程序才会收到意向
(来源:)
因此,到目前为止,似乎没有一种方法可以在不将BroadcastReceiver
s拆分为两个单独的应用程序的情况下实现我上面提到的功能,一个使用权限,另一个不使用权限