在BroadcastReceiver中获取唤醒锁并保持它直到活动启动的正确方法是什么?这就是我所拥有的:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"tag");
wl.acquire();
Intent intent = new Intent(context, MyActivity.class);
context.startActivity(intent);
}
}
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"tag");
wl.release();
// I want to keep the screen on now.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
}
// The broadcastreceiver is fired via AlarmManager:
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, someTime, pendingIntent);
此外,如果广播接收器同时被触发,会发生什么?我假设唤醒锁管理器是同步的,这不会有问题?
感谢
一旦获得锁,您必须保留该锁实例,并在工作完成后完全释放该实例。您可以查看WakefulBroadcastReceiver.java的源代码,以更好地了解如何实现和使用它。
此外,从广播接收器开始活动不是一个好主意。想象一下,你在玩一个游戏,在一个关卡的中间,你的手机开始了一项活动。我认为你不会喜欢它。你应该发布一个通知,告诉用户以后可以在用户需要的时候打开活动。