唤醒睡眠锁定 android 不工作

Waking up a sleeping locked android not working

我将 ALARM_SERVICE 与以下 BroadcastReceiver 一起使用,以便开始我的 OnReceiveActivity:

public class AlarmReciever extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        try {

            Intent i = new Intent();
            i.setClassName("com.test", "co.test.OnReceiveActivity");
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );

            i.addFlags(
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                     );

            context.startActivity(i);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

当我在没有任何指定的 WindowManager.LayoutParams 标志的情况下尝试它时(当设备处于唤醒和解锁状态时)- 一切都按预期工作,这意味着 onReceive() 被调用并启动 OnReceiveActivity 成功地。但是,当存在标志时,它不起作用,无论是在设备休眠和查看时,还是在唤醒和解锁时。

在清单文件中指定了以下权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

这些不是 Intent 标志,不能与 Intent 上的 addFlags() 一起使用。

正如@CommonsWare 评论的那样,WindowManager.LayoutParams 标志不是 Intent 标志。

正确的方法是在OnReceiveActivityonCreate()中,使用getWindow()函数如下:

    getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    );

我以前的做法在我看到的很多例子中都有使用,所以很奇怪。