Android BroadcastReceiver при запуске - продолжайте работать, когда активность в фоновом режиме
69225 просмотра
4 ответа
Я отслеживаю входящие смс.
Мое приложение отлично работает с BroadcastReceiver
. Однако он работает из Activity и хотел бы продолжать BroadcastReceiver
работать все время (а не только во время работы Activity).
Как мне этого добиться? Я просмотрел жизненный цикл, BroadcastReceiver
но все, что упомянуто в документации, это то, что жизненный цикл ограничен onReceive
методом, а не жизненным циклом BroadcastReceiver
проверки входящих SMS.
Как я могу сделать это постоянным?
Спасибо
Автор: RasberryPoptart Источник Размещён: 12.11.2019 09:16Ответы (4)
145 плюса
Вам нужно определить получателя в манифесте с именем действия android.intent.action.BOOT_COMPLETED .
<!-- Start the Service if applicable on boot -->
<receiver android:name="com.prac.test.ServiceStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Не забудьте также включить заполненное разрешение на загрузку.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Используйте Сервис для этого, чтобы все сохранялось. И используйте приемники для получения событий Boot Up, чтобы перезапустить службу снова, если система загружается.
Код для запуска службы при загрузке. Заставьте Сервис сделать вашу работу по проверке смс или что угодно. Вы должны сделать свою работу, чтобы MyPersistingService
определить это самостоятельно.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ServiceStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent("com.prac.test.MyPersistingService");
i.setClass(context, MyPersistingService.class);
context.startService(i);
}
}
Автор: Javanator
Размещён: 13.03.2011 02:59
7 плюса
Услуга или загрузка завершена не является обязательной
На самом деле, вам не нужно реализовывать Service
или регистрироватьсяandroid.intent.action.BOOT_COMPLETED
В некоторых примерах показано, как регистрировать / отменять регистрацию BroadcastReceiver
при создании и уничтожении действия. Тем не менее, это полезно для намерений, которые вы ожидаете, только когда приложение открыто (например, для внутренней связи между Service / Activity).
Однако, в случае SMS, вы хотите слушать намерение все время (и не только, когда ваше приложение открыто).
Есть другой способ
Вы можете создать, class
который расширяется BroadcastReceiver
и регистрироваться с желаемыми намерениями через AndroidManifest.xml
. Таким образом, BroadcastReceiver
будет зависеть от вашей деятельности (и не будет зависеть от жизненного цикла деятельности)
Таким образом, BroadcastReceiver
Android получит уведомление автоматически, как только придет SMS, даже если ваше приложение закрыто.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
MyCustomBroadcastReceiver.java
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
// DO YOUR STUFF
} else if (action.equals("ANOTHER ACTION")) {
// DO ANOTHER STUFF
}
}
}
}
}
Примечания
Вы можете добавить другие фильтры намерений в AndroidManifest и обрабатывать их все одинаково BroadcastReceiver
.
Запускайте Сервис только в том случае, если вы будете выполнять долгую задачу. Вам просто нужно отобразить уведомление или обновить базу данных, просто используйте код выше.
Автор: W0rmH0le Размещён: 14.07.2016 04:000 плюса
Помимо @Javanator
ответа я хотел бы включить чехол для версии Android (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
В моем случае это работает для Android SDK 29 (10)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context,FloatingWindow.class));
} else {
context.startService(new Intent(context, FloatingWindow.class));
}
Автор: Sabri Meviş
Размещён: 25.09.2019 06:46
0 плюса
используйте этот код, а также упомяните трансляцию в Манифесте также:
public class BootService extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Toast.makeText(context, "Boot Completed", Toast.LENGTH_SHORT).show();
//write code here
}
}
}
Автор: Pradeep Kumar
Размещён: 25.10.2019 09:02
Вопросы из категории :
- android Насколько хорошо отражает эмулятор Android Phone?
- android Как сохранить состояние активности Android с помощью сохранения состояния экземпляра?
- android Android: доступ к дочерним представлениям из ListView
- android Как вызвать SOAP веб-сервис на Android
- android Как вы форматируете дату и время в Android?
- android Android: Получение имени файла с камеры?
- android Перезапуск активности при ротации Android
- android Проблема с нехваткой памяти при загрузке изображения в растровый объект
- android Отправьте приложение с базой данных
- android Как удалить контакт программно в Android
- broadcastreceiver Есть ли способ получить уведомление, когда пользователь выключает устройство?
- broadcastreceiver Как проверить, зарегистрирован ли Receiver в Android?
- broadcastreceiver Android - Получение контекста от приемника вещания onReceive () для отправки
- broadcastreceiver Android - приемник SMS-вещания
- broadcastreceiver Android запускает активность с приемника вещания
- broadcastreceiver Android BroadcastReceiver при запуске - продолжайте работать, когда активность в фоновом режиме
- broadcastreceiver Запущены ли Android BroadcastReceivers в новом потоке?
- broadcastreceiver BroadcastReceiver. Что не так в моем коде?
- broadcastreceiver Как мне запустить мое приложение при запуске?
- broadcastreceiver Получить контекст в сервисе