特定Android活动的屏幕超时时间更长?
有类似的帖子,但没有一个是我正在寻找。 我想更改特定活动的屏幕超时时间。 如果可能,我想避免使用WakeLock,而且我不想更改设备的系统范围超时延迟设置。
有没有办法做到这一点手动跟踪用户活动和使用唤醒锁?
= ---- =
澄清:例如,如何将屏幕不活动超时(无输入后屏幕关闭所需的时间)设置为3分钟的某个值?
可以通过设置系统设置来完成此操作,但这会影响整个设备(即使在应用程序关闭后),所以这不是一个好的解决方案。
谢谢!
首先,请提供有关更改系统设置以增加活动超时时间的说明。 直觉上,我不喜欢这种方法,因为您正在进行系统范围的更改以适应您的应用程序。 此外,当以这种方式更改系统设置时,很难保证您能够将其设置回来(即您在设置之前忘记将其设置回去/您的应用程序崩溃)。
解决方案的快速总结:
现在,到代码:
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测试。
从我读到的内容来看,你似乎在一段时间后试图解散这项活动。 (如果我误解了你的问题,请纠正我。)你可以尝试使用计时器在一段时间后解除活动。 例如:
new Timer().schedule(task, timeout);
任务是指需要执行的方法(解除活动的函数)和超时表示任务执行之前的延迟。
你对我的理解有两个要求,
1)更改特定的活动屏幕超时。
2)如果用户没有长时间锁定屏幕进行互动。 它可以这样做,用于改变屏幕超时, 因为你不想使用任何WAKE LOCK试试这个
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
你可以在这里阅读https://developer.android.com/training/scheduling/wakelock.html
第二部分
一旦应用程序开始在应用程序的共享首选项中启动计时器,并且如果计时器计数超过了所需的时间限制,则重置标志,以便屏幕被锁定