Android 每次应用程序启动时停止启动通知

Android 每次应用程序启动时停止启动通知,android,Android,我有一个带有广播服务的通知,我已经在我的主活动的oncreate中定义了我的通知,但问题是每次打开主活动时通知都会一次又一次地发出。它应该只按照设定的时间开火 // Fire Notification from ReceiverReminder Intent intent = new Intent(this, ReceiverReminder.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, i

我有一个带有广播服务的通知,我已经在我的主活动的oncreate中定义了我的通知,但问题是每次打开主活动时通知都会一次又一次地发出。它应该只按照设定的时间开火

 // 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()
现在将当前时间作为第二个参数传递,告诉它立即触发,然后每隔1*60000*60*24毫秒重复一次

如果要在1*60000*60*24毫秒后首次触发警报,请将方法更改为:

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>