Android 是否可以使用标志保持屏幕打开和变暗?

Android 是否可以使用标志保持屏幕打开和变暗?,android,Android,我使用以下代码保持屏幕打开: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 我唯一的问题是我想继续使用调光屏幕来节省电池。我知道如何使用WakeLock来实现这一点,但是没有WakeLock有什么方法可以做到吗?通常,人们不会使用WakeLock工具,因为这需要你给你的应用程序一个额外的权限,并且很容易在你不小心保持了WakeLock,从而使屏幕保持打开的情况下引入bug。因此,最好使用窗口标志fl

我使用以下代码保持屏幕打开:

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

我唯一的问题是我想继续使用调光屏幕来节省电池。我知道如何使用WakeLock来实现这一点,但是没有WakeLock有什么方法可以做到吗?

通常,人们不会使用WakeLock工具,因为这需要你给你的应用程序一个额外的权限,并且很容易在你不小心保持了WakeLock,从而使屏幕保持打开的情况下引入bug。因此,最好使用窗口标志
flag\u KEEP\u SCREEN\u ON
,您可以在活动窗口上启用该标志

另一个解决方案是向需要保持屏幕打开的视图添加
android:keepScreenOn=“true”
()。这将允许您对哪些视图保留和哪些视图不保留进行更精细的控制。您甚至可以通过这种方式引用资源文件中的设置


一个相关的方法
setKeepScreenOn(true)
也可以用于此目的。

我不确定此方法是否节省了电池,但您可以创建一个不可见的活动,删除它的触摸输入,并将其设置为暗,如下所示:

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);}

我已经在我的一个应用程序中测试了代码。应该可以工作。

您可以清除使用该方法以编程方式设置的标志


这将使屏幕再次变暗。

为什么不使用它?使用wakelock时是否有任何问题?wakelock已被弃用。正如你所说,“人们不使用wakelock功能,因为这需要你给你的应用程序一个额外的权限,而且很容易引入bug”,这似乎就是你想要的……好的答案,但不是我的问题。我已经知道这些了。@WindRider:那是你的Qs吗?我将OP名称视为Victor.:)哈哈,我评论错问题了。对不起,巴德!我不知道我已经点击了另一个问题,不是我的问题。:)我知道这一点,但如果我这样做的话,屏幕会保持明亮,我想像wakelock一样保持暗显。我知道这是一个非常古老的问题,但希望上述解决方案能对将来偶然发现这个问题的人有所帮助!这似乎会让屏幕再次关闭。。。看起来OP想要一个屏幕昏暗唤醒锁定的替代品。。。
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)