У меня есть служба переднего плана, загружающая изображения и транслирующая статус, используя намерение с действием «myAction».
Мое приложение должно реагировать на трансляцию, например отправлять запрос к серверу после получения сообщения об успешном завершении или всплывающее уведомление после получения сообщения об ошибке. Я следую этому https://developer.android.com/training/run-background-service/report-status.html
Отправка широковещательного намерения не запускает и не возобновляет действие. BroadcastReceiver для Activity получает и обрабатывает объекты Intent, даже когда ваше приложение находится в фоновом режиме, но не переводит ваше приложение на передний план. Если вы хотите уведомить пользователя о событии, которое произошло в фоновом режиме, когда ваше приложение не было видно, используйте Уведомление. Никогда не запускайте Activity в ответ на входящее широковещательное намерение.
Сначала я пытаюсь статически зарегистрировать свой широковещательный приемник в Manifest. Не работает. Затем я следую этой инструкции: Не отключать широковещательный приемник после закрытия приложения, чтобы запустить службу для регистрации моего широковещательного приемника. Оба не работают (журнал не отображается), когда я смахиваю или закрываю приложение. Чтобы быть конкретным, я могу видеть журналы «HAHAHAHA» и «HEHEHEHE», когда они находятся на переднем плане. Он не выходит, когда я вычеркиваю его из списков приложений или нажимаю назад, чтобы выйти из приложения.
Вот мой код. Где я скучаю?
В моем манифесте
<application...>
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="false">
<intent-filter android:priority="0">
<action android:name="myAction"/>
</intent-filter>
</receiver>
<service
android:name=".MyService"
android:exported="false"/>
</application>
MyBroadcastReceive.java
public class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("HAHAHAHA", "Broadcast received.");
}
}
MyService.java
public class MyService extends Service {
BroadcastReceiver mReceiver;
// use this as an inner class like here or as a top-level class
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do something
Log.d("HEHEHEHE", "Broadcast received.");
}
}
@Override
public void onCreate() {
// get an instance of the receiver in your service
IntentFilter filter = new IntentFilter();
filter.addAction("myAction");
mReceiver = new MyReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.d("HEHEHEHE", "onDestroy");
super.onDestroy();
}
}
MainActivity.java
onStart() {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
Трансляция называется следующим образом:
LocalBroadcastManager.getInstance(service).sendBroadcast(intent);