Не удалось запустить BroadcastReceiver в остановленном состоянии с флагом FLAG_INCLUDE_STOPPED_PACKAGES - PullRequest
0 голосов
/ 07 февраля 2019

Вариант использования:

Запуск фона операции при нажатии кнопки.Операция> находится в BroadcastReceiver в Application1, а> намерение транслируется из Application2.

Application2 BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Receiver triggered", Toast.LENGTH_SHORT).show();
    }
}

Приложение2 AndroidManifest.xml:

<receiver
android:name="com.my.package.MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
       <action android:name="my.custom.action" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

Приложение1 sendMyBroadcast() (вызывается при нажатии кнопки):

public void sendMyBroadcast(){
Toast.makeText(getActivity(), "Sending broadcast", Toast.LENGTH_SHORT).show();
        Intent intent =  new Intent("my.custom.action");
        intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        this.getActivity().sendBroadcast(intent);
}

Я также пытался проверить мой BroadcastReceiver из adbс помощью следующей команды:
adb shell am broadcast -a my.custom.action --include-stopped-packages

Даже указанная выше команда не может запустить BroadcastReceiver.Но если я запускаю приложение один раз, а затем закрываю его, то приведенная выше команда может вызвать BroadcastReceiver.

ps: Как видно из кода, я передаю намерениеот Fragment, хотя я не думаю, что это должно иметь какое-либо значение.

РЕДАКТИРОВАТЬ: Также пытался использовать явное намерение и все еще не работает

public void sendMyBroadcast(){
Toast.makeText(getActivity(), "Sending broadcast", Toast.LENGTH_SHORT).show();
        Intent intent =  new Intent("my.custom.action");
        intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        ComponentName component = new ComponentName("com.my.package", "com.my.package.MyBroadcastReceiver");
        intent.setComponent(component);
        this.getActivity().sendBroadcast(intent);
}
...