web-dev-qa-db-fra.com

Exécution en arrière-plan non autorisée. Android O en attente

J'ai un service qui planifie un en attente qui commence ma notification. Cependant, depuis Android O, je reçois cette erreur. J'ai fait des recherches et suis tombé sur context.registerReceiver, mais cela ne semble pas résoudre le problème.

Erreur:

W/BroadcastQueue: Background execution not allowed: receiving Intent { act=Android.intent.action.PACKAGE_ADDED dat=package:my.great.package flg=0x4000010 (has extras) } to com.google.Android.googlequicksearchbox/com.google.Android.apps.gsa.googlequicksearchbox.GelStubAppWatcher

`` `

Mon en attente:

Intent myNotification = new Intent("services.notifications.Notification");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int) (Math.random() * Integer.MAX_VALUE), myNotification, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
alarmManager.setExact(AlarmManager.RTC_WAKEUP, day.getTimeInMillis(), pendingIntent);

Ma notification:

public class Notification extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        context.registerReceiver(this, new IntentFilter());

        try {
            WakeLock wakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).newWakeLock(1, "NotificationWakeLock");
            wakeLock.acquire(10000);

            try {
                scheduleNotification(context, intent);
            } finally {
                wakeLock.release();
            }
        } catch (NullPointerException e) {}
    }
}
8
Jason

Je l'ai résolu en ajoutant un service de premier plan:

Intent test = new Intent(this, NotificationService.class);
startForegroundService(test);

Cela affichera une notification indiquant que mon application est en cours d'exécution au premier plan.

Et en ajoutant ceci dans mon service oncreate:

startForeground(100, new NotificationCompat.Builder(this).build());
0
Jason