唤醒一个睡觉的锁定机器人不起作用



我在 oreder 中使用带有以下BroadcastReceiverALARM_SERVICE来开始我的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标志不是意图标志。

正确的方法是在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
    );

之前做过的方式在我见过的许多例子中使用过,这使得它很奇怪。

最新更新