WakefulBroadcastReceiver已弃用

时间:2017-11-10 07:04:00

标签: android android-broadcastreceiver receiver powermanager

为了创建一个接收器,我在旧项目中扩展了WakefulBroadcastReceiver。但现在是deprecated。而不是我现在应该使用WakefulBroadcastReceiver的{​​{1}}以及如何使用新方法转换下面的代码?

这是我的代码:

Receiver

2 个答案:

答案 0 :(得分:7)

您可以这样重写代码:

    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权限。

答案 1 :(得分:6)

API等级 26.1.0 中的

WakefulBroadcastReceiver 已弃用

  

从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;
    }

}

对于演示案例,请检查