我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。
我的问题是,如何在5分钟内检测到空闲代码?
我想你可以在你的应用程序中使用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中安排重复任务
你应该试试这个,它会在检测到空闲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);
}
这里有一个更好的解决方案……非常简单
我使用倒数计时器作为波纹管:
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