当前位置: 首页 > 知识库问答 >
问题:

检测Android中应用程序何时空闲

霍财
2023-03-14

我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。

我的问题是,如何在5分钟内检测到空闲代码?

共有3个答案

公冶泰
2023-03-14

我想你可以在你的应用程序中使用http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)和http://developer.android.com/reference/android/app/Activity.html#dispatchKeyEvent(android.view.KeyEvent)来设置一个时间戳,每次用户交互发生时(只需覆盖方法并在最后返回false,以便事件将传播到底层视图)-然后你可以使用某种计时器,递归地检查交互的最后一个时间戳,并在达到5分钟空闲时间时触发屏幕保护程序。

因此,在活动中,您只需像这样覆盖前面提到的方法:

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
   timestamp = System.getCurrentTimeMilis();
   return false; // return false to indicate that the event hasn't been handled yet
}

dispatchKeyEvent和您可以重写以确定用户活动的其他方法应该非常相似。

如果您使用多个活动,您可能希望创建一个基类,扩展活动并覆盖您要处理的所有调度XXXEvent,并将其用作所有活动的基类。但是我想你的实现细节可能有点超出实际问题的范围:)

对于计时器的不同可能性,您可以在此处找到有用的信息:在Android中安排重复任务

轩辕华辉
2023-03-14

你应该试试这个,它会在检测到空闲5分钟的时候发出提示。

Handler handler;
Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    r = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, "user Is Idle from last 5 minutes",
                Toast.LENGTH_SHORT).show();
        }
    };
    startHandler();
}
@Override
public void onUserInteraction() {
     // TODO Auto-generated method stub
     super.onUserInteraction();
     stopHandler();//stop first and then start
     startHandler();
}
public void stopHandler() {
    handler.removeCallbacks(r);
}
public void startHandler() {
    handler.postDelayed(r, 5*60*1000);
}
宗政博
2023-03-14

这里有一个更好的解决方案……非常简单

我使用倒数计时器作为波纹管:

private long startTime = 15 * 60 * 1000; // 15 MINS IDLE TIME
private final long interval = 1 * 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    countDownTimer = new MyCountDownTimer(startTime, interval);
}

@Override
public void onUserInteraction(){
    super.onUserInteraction();

    //Reset the timer on user interaction...
    countDownTimer.cancel();            
    countDownTimer.start();
}

public class MyCountDownTimer extends CountDownTimer {
    public MyCountDownTimer(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public void onFinish() {
        //DO WHATEVER YOU WANT HERE
    }

    @Override
    public void onTick(long millisUntilFinished) {
    }
}

干杯…………:)

 类似资料:
  • 我有一个布局,要求用户输入名称和日期。用于输入我使用的日期https://github.com/ErNaveen/MaterialDateTimePicker库,也可以使用OkHttpLibrary将数据发送到服务器。当我在输入两个数据后单击提交按钮时,我得到了以下错误。响应的作用域。。。 错误:

  • 我想检测来电。我是用广播接收器做的,效果很好。但当我的应用程序关闭时,它会显示“应用程序已停止”(应用程序崩溃)。那么我如何启动我的应用程序来执行操作呢? 这是我的收音机:

  • 我尝试在某些所需类的每个方法中使用javassist注入方法调用语句。该语句对应于java代理jar中的一个类。例如,如果我的代理拥有像a.b.HelperClass这样的类,那么我正在注入a.b.HelperClass。call();在每个使用javassist的类的开头。 我尝试了一个spring boot web应用程序,该代理运行良好,但在RCP应用程序中,它正在抛出 JAVAlang.C

  • 我想检测传入/传出电话号码时,我的应用程序不运行,它被杀死。我已经实现了以下代码,它只检测呼叫,如果应用程序正在运行或在后台,但不工作时,应用程序被杀死。 舱单

  • 我使用的是mapbox sdk 6.3.0。我可以将一个多边形添加到地图中,并允许用户通过更改特征然后更新特征集合来拖动它,如下所示: 一切都很好。 然后我尝试将SDK从6.3.0更新到7.3.0,然后在拖动时突然出现以下崩溃(它是间歇性的,但很频繁) 2019-04-29 17:58:03.119 24115-24204/com。应用程序。fr.dev A/S响应者。de:java\u vm\u

  • 问题内容: 有时,通过按主屏幕按钮可以关闭应用程序,并且不会调用onDestroy()。我想在整个应用程序关闭时调用一个方法,而我不会在所有活动的onDestroy()中调用我的方法。 问题答案: 在appication类内实现LifecycleObserver然后用作打击: 也可以使用其他事件,例如Lifecycle.Event.ON_DESTROY或ON_CREATE