我收到了广播服务的通知,并且我已经在我的主要活动中创建了我的通知,但问题是每次打开主要活动时都会一次又一次地发出通知。它应该只根据设定的时间开火。
// Fire Notification from ReceiverReminder
Intent intent = new Intent(this, ReceiverReminder.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
long recurring = (1 * 60000 * 60 * 24); // in milliseconds
am.setRepeating(AlarmManager.RTC, Calendar.getInstance()
.getTimeInMillis(), recurring, sender);
//
答案 0 :(得分:2)
在developer.android.com中阅读 setRepeating方法的说明 根据它,参数是:
- 类型 - ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP,RTC或RTC_WAKEUP之一。
- triggerAtMillis - 使用适当的时钟(取决于警报类型),警报应首先关闭的时间(以毫秒为单位)。
- intervalMillis - 后续重复警报之间的间隔(以毫秒为单位)。
- 操作 - 闹钟响起时执行的操作;通常来自IntentSender.getBroadcast()。
现在您将当前时间作为第二个参数传递,告诉它立即触发,然后每1 * 60000 * 60 * 24毫秒重复一次。
如果您希望在1 * 60000 * 60 * 24 millis之后首次触发警报,请将您的方法更改为:
am.setRepeating(AlarmManager.RTC, Calendar.getInstance()
.getTimeInMillis() + recurring, recurring, sender);
修改:
根据您的评论,每次打开活动时都不应该重置闹钟。因此,您应该将状态保存在某处,例如在SharedPreferences中的变量中。所以你的代码应该是这样的:
boolean areAlarmsAlreadySet = ...// get boolean variable from SharedPreferences
if (!areAlarmsAlreadySet)
{
Intent intent = new Intent(this, ReceiverReminder.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
long recurring = (1 * 60000 * 60 * 24); // in milliseconds
am.setRepeating(AlarmManager.RTC, Calendar.getInstance()
.getTimeInMillis() + recurring, recurring, sender);
// set the variable in SharedPreferences to true
}
答案 1 :(得分:0)
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
和
<强>的AndroidManifest.xml 强>
{{1}}