Вариант использования:
Запуск фона операции при нажатии кнопки.Операция> находится в 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);
}