每次应用启动时停止通知触发

时间:2015-07-04 14:39:11

标签: android

我收到了广播服务的通知,并且我已经在我的主要活动中创建了我的通知,但问题是每次打开主要活动时都会一次又一次地发出通知。它应该只根据设定的时间开火。

 // 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);
    //

2 个答案:

答案 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}}