2011-11-04 79 views
2

我使用这个代码(从我的活动),以启动应用程序周期定时器:我如何知道我的闹钟管理器计时器是否打开?

Intent intent = new Intent(this, MyBroadcastReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),(i * 1000), pendingIntent); 
Toast.makeText(this, "Alarm set in " + i + " seconds", 
Toast.LENGTH_SHORT).show(); 

我想知道我怎么能知道(从不同的活动)的定时器运行?

回答

2

我能想到的一种可能性是检查是否定义了待定Intent。

您可以拨打

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE); 

这会给你如果不指定意图是待处理的意图,或者为null。这并不能保证设置了警报,但它是一种简单的方法来检查设置的警报代码是否以前被调用过。

另一种可能是将所有设置的警报保存在SharedPreferences文件中。通过这种方式,您可以在共享prefs文件中查找您的应用程序设置的所有警报。

至于我可以看到有没有办法让一组报警列表中停止功能您从AlarmManager

+0

嗨,它不适合我,我总是从我开始的时候获得价值(不为空)。 b.t.w以停止定时器我使用:\t \t \t //准备意图 \t \t \t意图意图=新意图(此, \t \t \t \t \t LocaitonSampleBroadcaseReceiver.class); \t \t \t的PendingIntent的PendingIntent = PendingIntent.getBroadcast( \t \t \t \t \t this.getApplicationContext(),234324243,意图,0); \t \t \t //停止计时器 \t \t \t AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE); \t \t \t alarmManager.cancel(pendingIntent); – user733284

+0

这是正确的PendingIntent将被存储,直到您调用挂起的意图取消。这是与方法的问题,你只能检查意图是否存在,而不是在警报管理器注册 – Janusz

0

应用

Intent intent = new Intent(this, LocaitonSampleBroadcaseReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); 

只补充一点:

pendingIntent.cancel(); 

所以你可以使用字符串写评论Janusz

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE);