У меня есть служба для сканирования устройств с низким энергопотреблением Bluetooth и отображения уведомлений. Это работает, если приложение запущено или оно находится в фоновом режиме. Но если приложение было удалено из фона, служба работает, но сканирование Bluetooth не работает. Может ли сервис что-нибудь сделать, если приложение убито? Спасибо.
Фоновая служба Android Сканирование Bluetooth
Ответы (2)
Непонятно по поводу вопроса.
Но исходя из моего понимания вышеупомянутого вопроса, пожалуйста, найдите мои комментарии следующим образом. В крайнем случае, если системе Android требуется память, в зависимости от важности процессов она начинает удалять процессы в порядке наименьшего значимости. В этом случае, если ваше приложение будет убито, служба из этого приложения не сможет продолжать работу. Его тоже убивают.
Но можно поместить процесс, в котором работает служба, как процесс переднего плана с помощью метода startForground (), который с меньшей вероятностью будет убит.
Если служебный компонент приложения и все приложение работают в двух разных процессах, и процесс, запускающий все приложение, убивается, но процесс с запущенной службой все еще существует, тогда необходимо проверить зависимости, такие как компонент BluetoothAdapter или такие вещи. убит процессом приложения и убедитесь, что служба является автономным компонентом, работающим в другом процессе.
Спасибо за ответ. Проблема заключалась в том, что контекст приложения был недоступен. Я нашел для этого решение. Я запускаю Alarmmanager и каждые 15 минут отправляю намерение. Это намерение обрабатывается моим собственным приемником, который объявлен в AndroidManifest.xml. Если намерение выполнено, контекст приложения доступен, и я могу запустить службу.
Запустить AlarmManager
Intent alarmIntent = new Intent(MyApp.getAppContext(),AlarmBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MyApp.getAppContext(), 0, alarmIntent, 0);
AlarmManager alarmMgr = (AlarmManager)MyApp.getAppContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
AlarmManager.INTERVAL_FIFTEEN_MINUTES,
AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);
Код для получателя
package com.example;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlarmBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
}
}
Объявить получателя в AndroidManifest.xml
<receiver
android:enabled="true"
android:name="com.example.AlarmBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.example.AlarmBroadcastReceiver.checkservice" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>