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