特定Android活动的屏幕超时时间更长?

有类似的帖子,但没有一个是我正在寻找。 我想更改特定活动的屏幕超时时间。 如果可能,我想避免使用WakeLock,而且我不想更改设备的系统范围超时延迟设置。

有没有办法做到这一点手动跟踪用户活动和使用唤醒锁?

= ---- =

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

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

谢谢!


首先,请提供有关更改系统设置以增加活动超时时间的说明。 直觉上,我不喜欢这种方法,因为您正在进行系统范围的更改以适应您的应用程序。 此外,当以这种方式更改系统设置时,很难保证您能够将其设置回来(即您在设置之前忘记将其设置回去/您的应用程序崩溃)。

解决方案的快速总结:

  • 在调用key,touch,trackball事件的Activity上使用Activity.onUserInteraction()方法。
  • 当您的活动的根视图(或活动中持续存在的某个视图)上存在用户交互调用View.setKeepScreenOn()时。
  • 使用一个简单的处理程序来发布延迟的消息,以在一段时间后禁用屏幕。
  • 现在,到代码:

    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

    第二部分
    一旦应用程序开始在应用程序的共享首选项中启动计时器,并且如果计时器计数超过了所需的时间限制,则重置标志,以便屏幕被锁定

    链接地址: http://www.djcxy.com/p/77495.html

    上一篇: Longer screen timeout for a specific Android activity?

    下一篇: what is the purpose of link rel="pingback"?