WakefulBroadcastReceiver устарела

Для создания приемника я расширен WakefulBroadcastReceiver в моем старом проекте. Но теперь это deprecated, Вместо WakefulBroadcastReceiver который Receiver Я должен использовать сейчас, и как преобразовать код ниже с новым методом?

Вот мой код:

 public class TaskFinishReceiver extends WakefulBroadcastReceiver {
    private PowerManager mPowerManager;
    private PowerManager.WakeLock mWakeLock;
    @Override
    public void onReceive(Context context, Intent intent) {
        mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        turnOnScreen();
        Intent wakeIntent = new Intent();

        wakeIntent.setClassName("com.packagename", "com.packagename.activity.TaskFinished");
        wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(wakeIntent);
    }


    public void turnOnScreen(){
        mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        mWakeLock.acquire();
    }
}

2 ответа

Вы можете переписать свой код следующим образом:

    public class TaskFinishReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            //do your stuff in the JobIntentService class
            MyJobIntentService.enqueueWork(context, intent);
        }
    }

Это будет работать, поскольку, согласно документации, новый класс JobIntentService будет обрабатывать как пробужденные блокировки, так и обратную совместимость:

Вам не нужно использовать WakefulBroadcastReceiver при использовании этого класса. При работе на Android O, JobScheduler позаботится о блокировке от пробуждения за вас (удерживая блокировку от пробуждения с момента постановки в очередь на работу до момента отправки задания и во время его выполнения). При работе на предыдущих версиях платформы эта обработка блокировки пробуждения здесь эмулируется в классе путем непосредственного вызова PowerManager; это означает, что приложение должно запросить разрешение WAKE_LOCK.

WakefulBroadcastReceiver Устаревший в уровне API 26.1.0.

Начиная с Android O, ограничения проверки фона делают этот класс более бесполезным. (Обычно небезопасно запускать службу с момента получения широковещательной рассылки, поскольку у вас нет никаких гарантий того, что ваше приложение находится на переднем плане в данный момент и, таким образом, разрешено это делать.) Вместо этого разработчики должны использовать android.app.job.JobScheduler чтобы запланировать работу, и это не требует, чтобы приложение удерживало блокировку пробуждения при этом (система позаботится о удержании блокировки пробуждения для работы).

public class JobSchedulerService extends JobService {

    @Override
    public boolean onStartJob(JobParameters params) {

        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {

        return false;
    }

}

Для демонстрационного случая, Проверьте

  • JobScheduler
Другие вопросы по тегам