WakefulBroadcastReceiver is deprecated



为了创建一个接收器,我在旧项目中扩展了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

最新更新