мое приложение принудительно остановлено с помощью оптимизации батареи Android Oreo, уведомления игнорируются впоследствии - PullRequest
0 голосов
/ 28 февраля 2019

Здравствуйте, у меня проблемы с фоновым ограничением.Телефон, который я сейчас использую для тестирования, - это Nokia 7 plus на Android 8.1

Мое приложение некоторое время работает нормально, есть jobScheduler , который выполняет задание каждые 20 минут в фоновом режиме.

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

2019-02-28 10:13:25.925 3000-3000/? W/GCM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=myapp.pkg (has extras) }

Когда приложение включенов фоновом режиме, без принудительной остановки, сообщение «обратный вызов широковещательной передачи: результат = ОТМЕНЕН» все еще отображается, но уведомление работает.

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Log.d(this.getClass().getName(),"Gcm Info Received");
    new Intent(context, GcmIntentService.class);
    GcmIntentService.enqueueWork(context, intent);
}

Журнал «Gcm Информация получена» в моем приемнике вещания даже не отображается, в то время как сила, остановленная батареей.

Манифест

<receiver
        android:name=".GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="myapp.pkg" />
        </intent-filter>
    </receiver>

В моем GcmIntentService я добавляю следующий флаг перед отправкойтрансляция:

intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);

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

Я видел эту тему: https://github.com/firebase/quickstart-android/issues/89#issuecomment-233786785

И Contributor говорят так, как "принудительный останов" должен бытьчто-то, что пользователь делает намеренно.В моем случае приложение работало в фоновом режиме с 11 утра вчера до часа ночи сегодня, прежде чем оно было остановлено не мной ...

Я также пытался проверить его из подписанной версии приложения apk, как я виделкто-то сказал, что эта ошибка возникает, когда приложение находится только в отладке, но ничего не меняется.

Я также читал эту ветку: Как перезапустить службу после принудительной остановки приложения

Итак, я хотел бы знать, есть ли реальные решения для этого и не просить каждого пользователя отключить оптимизацию батареи в настройках?

Решение может быть в том, что приложение не будет убито силой оптимизации батареи иликаким-то образом перезапустите приложение после принудительного уничтожения.

...