Я ломаю голову вокруг этого, пока нет решения.Я видел много руководств, как это сделать ( Documentation , Tutorial ), и успешно выполнил это в Android 7. Что мне удалось сделать, это успешно получить уведомление, когда служба работает в фоновом режиме, когда пользовательактивность изменилась.Мое приложение работает отлично.Проблема с андроидом 8 и управлением батареей гугл.Мой сервис всегда убит.Итак ... Что я уже пытался преодолеть эту проблему:
Объясните пользователю, как отключить оптимизацию батареи для моего приложения, чтобы оно не убивало мой сервис.Проблема слишком сложна для пользователя Cummon.
Добавьте
uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"
и проверьте его с помощью кода:
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (pm.isIgnoringBatteryOptimizations(packageName)){
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
}
else {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
}
context.startActivity(intent);
Но я недооценил, что мое приложение может быть заблокировано в магазине игр, и это большая проблема.
Использовать службу переднего плана с постоянным уведомлением.Проблема заключается в том, что пользователю очень удобно видеть это текущее и иногда нерелевантное уведомление.
Так как я могу использовать ActivityRecognitionClient и всегда получать уведомление, когда активность меняется, даже когда мое приложениев фоновом режиме в Android 8?Может, подключить напрямую сервис гугл для этого как-нибудь?