【发布时间】:2015-01-28 20:17:59
【问题描述】:
我正在为 Android 构建一个警报类应用程序。
我设置了某个计时器来运行,然后在我在 onCreate 方法中调用的某个时间间隔(用户按下按钮后)后触发。
final int interval = 20000; // 20 Second
Handler handler = new Handler();
Runnable runnable = new Runnable(){
public void run() {
Toast.makeText(getApplicationContext(), "Timer to Wake",Toast.LENGTH_SHORT).show();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
};
handler.postAtTime(runnable, System.currentTimeMillis()+interval);
handler.postDelayed(runnable, interval);
我还在 onCreate 方法中禁用了键盘:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
在 Android 开发者文档中,它说:
窗口标志:当设置为窗口正在添加或可见时,一旦窗口显示,系统将戳电源管理器的用户活动(就好像用户已经唤醒了设备)打开屏幕。
现在,当我按下按钮触发计时器后,我会立即关闭屏幕。等待 20 秒后,屏幕没有被戳,设备也没有唤醒。这里可能是什么问题?当我在等待 20 秒后使用电源按钮打开屏幕时,我确实发现键盘已禁用。当我打开屏幕时,屏幕也永远处于唤醒状态。所以我知道这些标志正在起作用。我只需要它在计时器触发时“唤醒”!
【问题讨论】:
标签: java android eclipse oop timer