【问题标题】:Waking up a sleeping locked android not working唤醒一个睡眠锁定的机器人不工作
【发布时间】:2015-03-11 20:42:28
【问题描述】:

我使用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" />

【问题讨论】:

    标签: android android-layout android-activity android-permissions


    【解决方案1】:

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

    【讨论】:

    • 这似乎适用于this 家伙。无论如何,我该如何添加它们? @commonsware
    • @nobatlinux:在正在启动的活动中,将这些标志传递给getWindow().addFlags()
    • 是的,刚刚知道了 :) 为未来的求职者添加了答案。
    【解决方案2】:

    正如@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
        );
    

    我以前的做法在我见过的许多例子中都使用过,这很奇怪。

    【讨论】:

    • @notbatlinux 您应该尝试编辑从中获得解决方案提示的答案并接受该答案,而不是编写新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2015-11-20
    • 1970-01-01
    • 2014-07-29
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多