Android 每次应用程序启动时停止启动通知
我有一个带有广播服务的通知,我已经在我的主活动的oncreate中定义了我的通知,但问题是每次打开主活动时通知都会一次又一次地发出。它应该只按照设定的时间开火Android 每次应用程序启动时停止启动通知,android,Android,我有一个带有广播服务的通知,我已经在我的主活动的oncreate中定义了我的通知,但问题是每次打开主活动时通知都会一次又一次地发出。它应该只按照设定的时间开火 // Fire Notification from ReceiverReminder Intent intent = new Intent(this, ReceiverReminder.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, i
// 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);
//
阅读根据它,参数为:
- 类型-已用实时、已用实时唤醒、RTC或RTC唤醒中的一种李>
- triggerAtMillis-使用适当的时钟(取决于报警类型),以毫秒为单位的闹钟首次响起的时间李>
- intervalMillis-后续重复报警之间的间隔(毫秒)李>
- 操作-警报关闭时执行的操作;通常来自IntentSender.getBroadcast()
am.setRepeating(AlarmManager.RTC, Calendar.getInstance()
.getTimeInMillis() + recurring, recurring, sender);
编辑:
根据您的评论,您不应该在每次打开活动时重置警报。因此,您应该将状态保存在某个位置,例如在SharedReferences中的变量中。因此,您的代码应该是这样的:
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
}
及
AndroidManifest.xml
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
如果您在onCreate中编写代码,它将在您打开代码时一直执行。用任何方法重构它,像点击按钮一样设置警报。我尝试每24小时启动一次。我有三个服务,其中一个应该每24小时启动一次,其他的3天和7天启动一次,但我没有收到。你为什么在回答中加上那三个点?SharedReferences在哪里?“…”这意味着您必须自己编写额外的代码。阅读这里有关SharedReferences的内容,以及如何使用它来持久化数据这两部分都做了什么?我应该把第一个放在哪里??有什么解释吗?
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>