我有一个基于GPS的应用程序,每秒都会在GPS事件上运行。每个活动都实现了LocationListener,每个位置监听器都调用一个辅助类来执行一堆东西(每秒一次)。如果超过1秒没有GPS事件(比如说5秒),我希望屏幕变红。这是一些伪代码:
以下是辅助类
中的函数static long heartBeatTimer;
static public void filter(speed){
//this routine is called once a second unless error
....
heartBeatTimer = System.nanoTime();
....
}
static public void heartBeat(){
//This routine gets called on app launch and runs forever
While (day != night){
if (System.nanoTime() - heartBeatTimer > 5000000000) {
// This is incorrect, I want to go to an ErrorActivity. Doesn't work
// Can this be done from a helper class????
Intent target = new Intent(this, ErrorActivity.class);
startActivity(target);
}
}
}
这里真的有两个问题。我的heartBeat活动将全部消耗资源,因此必须有更好的方法来做到这一点。其次,一旦heartBeat超时,我怎么能去我的错误活动。
我没有尝试甚至开始工作。
我尝试过使用AlarmManager但是这段代码编译但崩溃时出现空指针异常。
PendingIntent p = setScreenRed();
p.cancel();//or p.cancel();, i am not sure
AlarmManager am=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC, System.currentTimeMillis() + 5000, p);
答案 0 :(得分:0)
您如何看待这个伪代码:
if(GPS == true){
doGSPstuff();
PendingIntent p = setScreenRed();
alarmManager.cancel(p);//or p.cancel();, i am not sure
alarmManager.set(5000, p);
}
基本上它(重新)每次获得gps时都会设置alarmManager。 如果没有gps,它将不会重置alarmManager,它将在5秒后运行。