BroadcastReceiver获取唤醒锁定以启动“活动”的正确模式



在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的源代码,以更好地了解如何实现和使用它。

此外,从广播接收器开始活动不是一个好主意。想象一下,你在玩一个游戏,在一个关卡的中间,你的手机开始了一项活动。我认为你不会喜欢它。你应该发布一个通知,告诉用户以后可以在用户需要的时候打开活动。

最新更新