Неявный Android BroadcastReceiver с разрешением подписи не вызывается в Android O - PullRequest
1 голос
/ 30 апреля 2019

В моем первом приложении я определяю пользовательское разрешение и неявное 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?

1 Ответ

0 голосов
/ 30 апреля 2019

Согласно ответу CommonsWare, проблема в том, что я пропустил setPackage() часть. Поэтому я изменил код, как показано ниже, и теперь широковещание получено:

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