1

我的应用程序获得了唤醒锁,但无法从活动中唤醒设备

这是我的代码:

public void onCreate(){
    super.onCreate();
    //acquire wakelock logic here
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            mHandler.obtainMessage().sendToTarget();
        }
    }, 30000);
.....
}
public Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        turnScreenOn();
    }
}

private void turnScreenOn() {
    Log.i("MainActivity", "Turn screen on");
    getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    );
}

在日志中,我看到 turnScreenOn 已执行,但屏幕仍处于关闭状态。当我从 onCreate() 执行此方法并从 Service 执行此方法时 - 一切正常,但我想从 Activity 执行它。我没有找到任何禁止这样做的信息,我没有在日志中看到任何错误。

是否有可能在不从服务启动的情况下唤醒活动/应用程序?如果不可能 - 它是否记录在某处?

提前致谢

4

1 回答 1

1

我想您应该使用 AlarmManager - 您应该向警报管理器注册一个 PendingIntent 并让接收器接收警报 - 这可以保证唤醒手机。您仍然可能需要一项服务 (WakefullIntentService) 来为您管理唤醒锁。有关代码,请参阅PowerManager 唤醒锁未从服务中唤醒设备

顺便说一句,TimerTasks 无论如何都是一种旧的做事方式 - 计划的池执行器是你今天要使用的 IIRC。

于 2014-07-28T20:57:11.770 回答