为了创建一个接收器,我在旧项目中扩展了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();
}
}
你可以像这样重写你的代码:
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