是否可以使用标志保持屏幕开启和调光?

时间:2013-04-26 13:47:08

标签: android

我正在使用以下代码来保持屏幕显示:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

我唯一的问题是我想继续使用调光屏来节省电池电量。我知道如何使用WakeLock来做到这一点,但有没有办法在没有它的情况下做到这一点?

3 个答案:

答案 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)

这将使屏幕再次变暗。