Yea*_*508 17 android receiver powermanager android-broadcastreceiver
为了创建一个接收器,我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();
}
}
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
在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)
对于演示案例,请检查
归档时间: |
|
查看次数: |
13798 次 |
最近记录: |