我使用Alarm来从服务器获取数据.
我喜欢给用户启动和停止闹钟的选项.
这意味着我必须检查是否已经设置了闹钟.
我发现一些代码告诉我是否已经设置了闹钟:
我喜欢给用户启动和停止闹钟的选项.
这意味着我必须检查是否已经设置了闹钟.
我发现一些代码告诉我是否已经设置了闹钟:
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(),I,PendingIntent.FLAG_NO_CREATE); found = (P!=null);
如果闹钟已经设置,我取消它,但如果没有设置,那么我设置它(如切换)
问题是这只有一次.上述代码首次检查现有的报警
将返回null,表示无报警,但在返回指针后取消报警
到了一些东西,但是闹钟没有运行.
这里是设置闹钟的代码
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); Intent I = new Intent(getApplicationContext(),PendingIntent.FLAG_CANCEL_CURRENT); am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),60000,P);
这里是取消闹钟的代码:
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); Intent I = new Intent(getApplicationContext(),PendingIntent.FLAG_CANCEL_CURRENT); am.cancel(P);
取消闹钟后,我可以重新设置一个消息,让它处于待处理状态.
解决方法
取消AlarmManager时,请勿使用具有FLAG_CANCEL_CURRENT标志的PendingIntent.
取而代之的是在取消警报后明确取消PendingIntent:
取而代之的是在取消警报后明确取消PendingIntent:
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); Intent i = new Intent(getApplicationContext(),AlarmReceiver.class); PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(),i,0); am.cancel(p); p.cancel();