我有一个警报,该警报(每30秒)定期唤醒我的设备。当警报启动时,我使用以下代码打开一个窗口:
private void CreatePreviewDialog()
{
dummy_frame_layout = new DummyFrameLayout(context);
wm_params = new WindowManager.LayoutParams(
240, 320, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
// WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
wm_params.gravity = Gravity.CENTER;
wm_params.setTitle("Preview");
window_manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
window_manager.addView(dummy_frame_layout, wm_params);
}
然后,我使用以下代码关闭窗口:
private void DestroyPreviewDialog()
{
((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).removeView(dummy_frame_layout);
dummy_frame_layout = null;
}
问题如下。假设该设备处于待机模式。当警报发生时,它会调用打开显示的CreatePreviewDialog
。当调用DestroyPreviewDialog
时,我希望该设备以其待机模式返回,或者至少将显示器关闭,但我尚未找到对此问题的任何解决方案。在关闭DestroyPreviewDialog
中的窗口之前,我还添加了以下代码:
wm_params.screenBrightness = 0.0f;
window_manager.updateViewLayout(dummy_frame_layout, wm_params);
但是什么也没有发生。屏幕一直在显示锁定屏幕,直到下一个警报发生。就像该应用程序在前景一样。任何想法?
没有办法做到...看看这个问题:强制待机
您需要用于系统应用程序的许可...