具有签名权限的Android隐式BroadcastReceiver在Android O中不会被调用

时间:2019-04-30 13:18:18

标签: android broadcastreceiver android-8.0-oreo android-implicit-intent

在我的第一个应用程序中,我在清单文件中定义了一个自定义权限和一个隐式<permission android:name="com.example.test.TEST" android:protectionLevel="signature" /> <receiver android:name=".TestBroadcastReceiver" android:enabled="true" android:exported="true" android:permission="com.example.test.TEST"> <intent-filter> <action android:name="com.example.test.TEST_RECEIVER" /> </intent-filter> </receiver>

public class TestBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d("Test", "Hello World!");
        Toast.makeText(context, "Hello World!", Toast.LENGTH_LONG).show();

    }
}

这是TestBroadcastReceiver.java:

<uses-permission android:name="com.example.test.TEST" />

在第二个应用程序中,我已在清单文件中添加了权限:

getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER"));

在这里,我发送广播:

 import * as myFile from "./myFile";
 jest.mock("./myFile");
 myFile.myFunc = jest.fn().mockImplementation(() => {
     return "Some Value";
 });

但是在第一个应用程序中什么也没叫。我知道我们不能在android O及更高版本中使用隐式广播,但是根据here,需要签名许可的广播有一个例外:

  

需要签名许可的广播不受此限制   限制,因为这些广播仅发送到   使用相同的证书签名,而不是设备上的所有应用。

那么我该如何在android O中发信号通知我的其他应用?

1 个答案:

答案 0 :(得分:0)

根据CommonsWare的回答,问题是我缺少Version部分。所以我将代码更改如下,现在可以接收广播了:

setPackage()