我正在使用以下代码来保持屏幕显示:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我唯一的问题是我想继续使用调光屏来节省电池电量。我知道如何使用WakeLock
来做到这一点,但有没有办法在没有它的情况下做到这一点?
答案 0 :(得分:0)
通常情况下,人们不会使用唤醒锁设施,因为这需要您为应用程序提供额外的权限,并且很容易在您不小心保持唤醒锁定的情况下引入错误,从而使屏幕保持打开状态。因此,最好使用窗口标记FLAG_KEEP_SCREEN_ON
,您可以在活动窗口中启用该标记。
另一种解决方案是将android:keepScreenOn="true"
(documentation)添加到需要保持屏幕的视图中。这将允许您在哪些视图保持不变的情况下进行更细粒度的控制。您甚至可以通过这种方式从资源文件中引用设置。
相关方法setKeepScreenOn(true)
也可用于此目的。
答案 1 :(得分:0)
我不确定这种方法是否可以节省电量,但你可以创建一个不可见的活动并删除它的触摸输入,并设置它像这样昏暗:
wm = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTopView = (ViewGroup) inflater.inflate(
R.layout.activity_invisible, null);
params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_DIM_BEHIND
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.dimAmount=0.3f;//0 is transparent 1 is opaque
rl = (RelativeLayout) mTopView.findViewById(R.id.window);
getWindow().setAttributes(params);
wm.addView(mTopView, params);}
我已在我的applications之一中测试了代码。应该工作。
答案 2 :(得分:0)
您可以使用clearFlag()方法
清除以编程方式设置的标记getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
这将使屏幕再次变暗。