【问题标题】:Finish Activity after timeout if user don't touch screen如果用户不触摸屏幕,则在超时后完成 Activity
【发布时间】:2014-09-19 10:10:25
【问题描述】:

我有一个活动。我想要的是如果用户不触摸屏幕,超时后,此活动将自动完成()。有人有什么想法吗?

【问题讨论】:

  • 在你的根布局上使用onTouchListener,如果没有触摸事件finishActivity
  • 你有没有尝试过任何东西然后发布它
  • 参见 Activity.onUserInteraction 方法
  • 是的,你可以设置定时器。在计时器中设置您的时间。当计时器完成后,完成您的活动。
  • 我遇到的问题是如何在用户重新触摸屏幕时重置超时

标签: android android-activity


【解决方案1】:
CountDownTimer countDownTimer = new CountDownTimer(30000, 1000) {

        public void onTick(long millisUntilFinished) {
            //TODO: Do something every second
        }

        public void onFinish() {

            finish();
            //YourActivity.finish();  outside the actvitiy

        }
    }.start();

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            countDownTimer.cancel();
            countDownTimer.start();
        }
        return super.onTouchEvent(event);
    }

所以基本上你启动一个倒计时计时器然后等待它完成。完成后,在活动上调用完成。 如果在用户触摸屏幕之间,您取消计时器并重新启动它。

别忘了接受答案:)

【讨论】:

  • 如果我们通过键盘进行一些输入怎么办?它不计算来自键盘的输入并终止活动。
【解决方案2】:

了解如何在 Android 中等待/睡眠,示例:

wait for 3 seconds or user click

Wait a time - Android

How to "wait" a Thread in Android

当等待/睡眠结束时,只需调用 finish() 方法。

【讨论】:

    【解决方案3】:

    在你的活动中试试这个:

    new CountDownTimer(30000, 1000) {
    
         public void onTick(long millisUntilFinished) {
             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
         }
    
         public void onFinish() {
    
             finish();
             //YourActivity.finish();  outside the actvitiy
    
    
         }
      }.start();
    

    http://developer.android.com/reference/android/os/CountDownTimer.html

    【讨论】:

      【解决方案4】:

      使用这个:

      int time =0;
      

      然后为您的根布局添加 onTouchListener 并像这样更新时间值:

      time = 0;
      

      并像这样使用处理程序进行计数:

      final Handler handler = new Handler();
          handler.postDelayed(new Runnable() {
          @Override
          public void run() {
          time++;
          if(time>=10000){
                  finish();
           }  
          }
          }, 1000);
      

      很明显,我将完成时间设置为 10 秒。

      【讨论】:

      • Activity关闭后会继续
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多