gpt4 book ai didi

android - 特定 Android Activity 的屏幕超时时间更长?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:39 25 4
gpt4 key购买 nike

有与此类似的帖子,但没有一个是我要找的。我想更改特定 Activity 的屏幕超时。我想尽可能避免使用 WakeLock,并且我不想更改设备的系统范围超时延迟设置。

除了手动跟踪用户 Activity 和使用唤醒锁之外,还有什么方法可以做到这一点吗?

=----=

澄清:例如,如何将屏幕不活动超时(没有输入后屏幕关闭所需的时间)设置为某个值,例如 3 分钟?

可以通过设置系统设置来做到这一点,但这会影响整个设备(即使在应用程序关闭后),所以这不是一个好的解决方案。

谢谢!

最佳答案

首先,请注意更改系统设置以增加 Activity 的超时时间。直觉上我不喜欢这种方法,因为您要进行系统范围的更改只是为了适应您的应用程序。此外,当以这种方式更改系统设置时,很难保证您能够将其设置回来(即您忘记将其设置回来/您的应用程序在您设置之前崩溃)。

解决方案的快速总结:

  • 使用Activity.onUserInteraction()为按键、触摸、轨迹球事件调用的 Activity 方法。
  • 当有用户交互调用时View.setKeepScreenOn()在您的 Activity 的 Root View 上(或您的 Activity 中持久存在的某些 View )。
  • 使用简单的 Handler发布延迟消息以禁止在一定时间后保持屏幕亮起。

现在,进入代码:

private ViewGroup mActivityTopLevelView;

private static final int DISABLE_KEEP_SCREEN_ON = 0;
private static final int SCREEN_ON_TIME_MS = 1000*60*3;

@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
setScreenOn(true);
}

@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
setScreenOn(false);
}

@Override
public void onUserInteraction() {

super.onUserInteraction();
Log.d(TAG, "onUserInteraction");
setScreenOn(true);
}

private void setScreenOn(boolean enabled)
{
// Remove any previous delayed messages
Log.d(TAG, "setScreenOn to " + enabled);
mHandler.removeMessages(DISABLE_KEEP_SCREEN_ON);

if( enabled )
{
// Send a new delayed message to disable the screen on
// NOTE: After we call setKeepScreenOn(false) the screen will still stay on for
// the system SCREEN_OFF_TIMEOUT. Thus, we subtract it out from our desired time.
int systemScreenTimeout = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 0);
int totalDelay = SCREEN_ON_TIME_MS - systemScreenTimeout;
if( totalDelay > 0 )
{
mActivityTopLevelView.setKeepScreenOn(true);
Log.d(TAG, "Send delayed msg DISABLE_KEEP_SCREEN_ON with delay " + totalDelay);
mHandler.sendEmptyMessageDelayed(DISABLE_KEEP_SCREEN_ON, totalDelay);
}
}
else
{
mActivityTopLevelView.setKeepScreenOn(false);
}
}

private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == DISABLE_KEEP_SCREEN_ON)
{
setScreenOn(false);
}
}
};

在 Android 5.1.0 上测试。

关于android - 特定 Android Activity 的屏幕超时时间更长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com