WakefulBroadcastReceiver已弃用

Yea*_*508 17 android receiver powermanager android-broadcastreceiver

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

这是我的代码:

 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Bol*_*ing 10

您可以像这样重写代码:

    public class TaskFinishReceiver extends BroadcastReceiver {

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

这将起作用,因为根据文档,新的JobIntentService类将处理唤醒锁和向后兼容性:

使用此类时,您不需要使用WakefulBroadcastReceiver.在Android O上运行时,JobScheduler将为您处理唤醒锁定(从您排队工作到分配作业以及运行时保持唤醒锁定).在以前版本的平台上运行时,通过直接调用PowerManager,可以在类中模拟此唤醒锁处理; 这意味着应用程序必须请求WAKE_LOCK权限.

  • 这对我来说是一个更好的解决方案,因为我正在使用WakefulBroadcastReceiver-> IntententService模型进行Android O迁移,可以轻松转换为BroadcastReceiver-> JobIntentService! (2认同)

Int*_*iya 6

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

}
Run Code Online (Sandbox Code Playgroud)

对于演示案例,请检查

  • 如果您在此处提供有关工作安排人员的任何详细答案,将对他人有所帮助. (4认同)