首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓-关闭屏幕,不进入StandBy模式

安卓-关闭屏幕,不进入StandBy模式
EN

Stack Overflow用户
提问于 2013-01-11 16:38:53
回答 2查看 18.7K关注 0票数 11

我知道这问题已被提出了很多次,但始终没有得到满意的答案。

我的问题如下:

我有一个可以防止屏幕在预定时间内关闭的活动。

代码语言:javascript
复制
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

当预定的时间结束时,我会显示一个带有倒计时的对话框,告诉用户如果他没有按下“取消”,显示器将在10秒内关闭。

我设法关掉了显示屏,但电话总是切换到待机模式。

对于关闭,我使用:

代码语言:javascript
复制
Window mywindow = getWindow();

WindowManager.LayoutParams lp = mywindow.getAttributes();

lp.screenBrightness = 0.0f;

mywindow.setAttributes(lp);

是否有可能在不进入待机模式(暂停活动)的情况下完全使显示器变暗。

我的目标是,用户应该能够只需轻触显示器就可以再次使屏幕变亮。因此,该活动必须保持活动状态。

类似的问题也被问到了here

因为这个问题已经提了将近一年了,我希望也许有人能在同一时间解决这个问题。

很多问候

Siggy

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 22:32:02

似乎不可能仅仅通过触摸显示屏来关闭屏幕并重新激活。

我现在的新方法:

代码语言:javascript
复制
private WakeLock screenWakeLock;

PowerManager pm = PowerManager.getSystemService(Context.POWER_SERVICE);
screenWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                                "screenWakeLock");
screenWakeLock.acquire();

PARTIAL_WAKE_LOCK使中央处理器保持运行,但允许显示器关闭。

当按下power或home按钮时,显示屏再次打开,活动再次变为可见状态(无需“滑动解锁”或其他操作。否则)。

别忘了发布screenWakeLock

在我的例子中,我是在活动的onResume()中完成的:

代码语言:javascript
复制
if (screenWakeLock != null) {
   if(screenWakeLock.isHeld())
      screenWakeLock.release();
   screenWakeLock = null;
}

也许这对将来遇到类似问题的人有帮助。

票数 8
EN

Stack Overflow用户

发布于 2014-05-23 18:58:05

注意:我无法使用WAKELOCK

我已经想出了一个涉及更改SCREEN_OFF_TIMEOUT的变通方法。使用下面的代码来实现它。

代码语言:javascript
复制
Settings.System.putInt(getContentResolver(), 
                           Settings.System.SCREEN_OFF_TIMEOUT, 10);

这会将系统范围内的screen_timeout超时设置为10毫秒。

现在,您可能会被由此带来的系统范围的更改所困扰。要解决这个问题,您可以获取默认的screen_timeout_time并将其保存到一个变量中,然后在活动的finish()中重新设置系统的SCREEN_OFF_TIMEOUT。

在将10ms设置为我们的screen_timeout get SCREEN_OFF_TIMEOUT之前,

代码语言:javascript
复制
int defaultScreenTimeout= android.provider.Settings.
      System.getInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT,-1);

现在,当您完成更改或当您的活动结束时,您可以将SCREEN_OFF_TIMEOUT设置回去。

代码语言:javascript
复制
@Override
public void finish(){
    Settings.System.putInt(getContentResolver(), 
                      Settings.System.SCREEN_OFF_TIMEOUT, defaultScreenTimeout);
super.finish();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14274390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档