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)