3

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 及更高版本中使用隐式广播,但根据这里,需要签名权限的广播有一个例外:

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

那么如何在 android O 中向我的其他应用发出信号呢?

4

1 回答 1

1

根据 CommonsWare 的回答,问题是我遗漏了setPackage()一部分。所以我改变了代码如下,现在收到广播:

getActivity().sendBroadcast(new Intent("com.example.test.TEST_RECEIVER").setPackage("com.example.test"));
于 2019-04-30T14:07:40.440 回答