Проблема со службой Android в SDK> = 26 - PullRequest
1 голос
/ 05 ноября 2019

Я создаю приложение, которое отправляет уведомления пользователю, даже если приложение было удалено из процесса или в фоновом режиме. На самом деле в версиях Android с SDK> = 26 я использую службы переднего плана. Для отображения уведомлений у меня есть служба (DatasNotification), которая запускает asyncTask (HttpRequest) для выполнения http-запроса, а asynctask в конце условий запускает новую службу, которая показывает уведомление. Когда мое приложение работает в фоновом режиме, у меня появляется системное уведомление, в котором говорится: мое приложение разряжает батарею. Во время анализа я понял, что это системное уведомление генерируется сервисом DatasNotification.

Это мой код DatasNotification:

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics());
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        startForeground(1, new Notification());
    }
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new HttpRequest(getApplicationContext(), 0).execute();
    return START_STICKY;
}

Есть ли какое-либо решение для запуска фоновой службы в sdk> = 26

1 Ответ

0 голосов
/ 05 ноября 2019

Это была особая функция Oreo (API26-27), чтобы показывать системное уведомление о том, что «[приложение] использует батарею», когда приложение запускало фоновые службы. Вы заметите, что не будете получать то же самоепредупреждение на устройствах под управлением P (API28) или Android 10 (API 29), так как это предупреждение было полностью удалено / отключено. Я не думаю, что вы можете что-то изменить в своем приложении, чтобы это предупреждение не отображалось на устройствах Oreo, если вы не можетеполностью избавьтесь от своих (фоновых) сервисов.

Пользователь может отключить отображение этого предупреждения, выполнив следующие действия:

  1. Разблокируйте устройство под управлением Android Oreo
  2. Проведите пальцем вниз по оттенку уведомления, полностью открывая уведомление «об использовании аккумулятора»
  3. Длительное нажатие на уведомление, пока оно не изменится и не покажет переключатель
  4. Нажмите на переключатель, убедившись, чтооно затенено
  5. Выберите Готово, чтобы отключить уведомление об использовании аккумулятора

( с* 1020 т о ч н *) * * тысяча двадцать-один

...