Android Android O中未调用具有签名权限的隐式BroadcastReceiver
Android implicit BroadcastReceiver with signature permission is not called in Android O
在我的第一个应用程序中,我在清单文件中定义了自定义权限和隐式 BroadcastReceiver
:
<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>
这是 TestBroadcastReceiver.java:
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();
}
}
在我的第二个应用程序中,我在清单文件中添加了权限:
<uses-permission android:name="com.example.test.TEST" />
在这里,我发送广播:
getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER"));
但是第一个应用程序没有调用任何东西。我知道我们不能在 android O 及更高版本中使用隐式广播,但根据 here,需要签名权限的广播有一个例外:
Broadcasts that require a signature permission are exempted from this
restriction, since these broadcasts are only sent to apps that are
signed with the same certificate, not to all the apps on the device.
那么我如何才能在 android O 中向我的其他应用发出信号?
根据 CommonsWare 的回答,问题是我缺少 setPackage()
部分。所以我更改了如下代码,现在收到了广播:
getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER").setPackage("com.example.test"));
在我的第一个应用程序中,我在清单文件中定义了自定义权限和隐式 BroadcastReceiver
:
<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>
这是 TestBroadcastReceiver.java:
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();
}
}
在我的第二个应用程序中,我在清单文件中添加了权限:
<uses-permission android:name="com.example.test.TEST" />
在这里,我发送广播:
getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER"));
但是第一个应用程序没有调用任何东西。我知道我们不能在 android O 及更高版本中使用隐式广播,但根据 here,需要签名权限的广播有一个例外:
Broadcasts that require a signature permission are exempted from this restriction, since these broadcasts are only sent to apps that are signed with the same certificate, not to all the apps on the device.
那么我如何才能在 android O 中向我的其他应用发出信号?
根据 CommonsWare 的回答,问题是我缺少 setPackage()
部分。所以我更改了如下代码,现在收到了广播:
getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER").setPackage("com.example.test"));