Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在测试BroadcastReceiver未接收受保护的广播_Android_Broadcastreceiver_Android Broadcast - Fatal编程技术网

Android 正在测试BroadcastReceiver未接收受保护的广播

Android 正在测试BroadcastReceiver未接收受保护的广播,android,broadcastreceiver,android-broadcast,Android,Broadcastreceiver,Android Broadcast,我将尽可能地概述这个场景。主要问题是:我如何动态声明两个接收器,它们都接收相同的广播,但只有一个具有正确的接收权限?在我的测试中,到目前为止,两个接收器都获得广播,因为我的应用程序持有声明的权限,而不仅仅是一个 在应用程序A中,我正在发送一个广播,我正在使用我定义的新权限保护该广播 在应用程序B中,我希望确保来自应用程序A的广播实际上受到保护。因此,我为相同的IntentFilter动态声明了两个接收者,一个拥有新权限,另一个没有。然而,在应用程序B的清单中,我当然声明 然而,两个接收者都得到了

我将尽可能地概述这个场景。主要问题是:我如何动态声明两个接收器,它们都接收相同的广播,但只有一个具有正确的接收权限?在我的测试中,到目前为止,两个接收器都获得广播,因为我的应用程序持有声明的权限,而不仅仅是一个

在应用程序A中,我正在发送一个广播,我正在使用我定义的新权限保护该广播

在应用程序B中,我希望确保来自应用程序A的广播实际上受到保护。因此,我为相同的
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" />
流量:

  • 为Android安装应用程序A以了解新权限
  • 安装并运行应用程序B
  • 调用App B
    start()
    方法
  • 切换到应用程序A以触发发送广播
  • 请参阅日志中的
    BroadcastReceiver
    s都被调用
  • 通过调用
    End()
    方法结束测试

  • 有什么想法吗?

    意识到我的错误在哪里。权限是在应用程序级别授予的,而不是在组件级别授予的。根据Android文档:

    要在发送时强制执行权限,请向
    sendBroadcast(Intent,String)
    sendOrderedBroadcast(Intent,String,BroadcastReceiver,android.os.Handler,int,String,Bundle)
    提供非空权限参数。只有被授予此权限的接收者(通过在其AndroidManifest.xml中使用标记请求)才能接收广播

    (来源:)

    以及:

    意图的发送方可以验证接收方是否具有权限,并通过方法调用指定非空权限。只有具有该权限的应用程序才会收到意向

    (来源:)

    因此,到目前为止,似乎没有一种方法可以在不将
    BroadcastReceiver
    s拆分为两个单独的应用程序的情况下实现我上面提到的功能,一个使用权限,另一个不使用权限