【问题标题】:AlarmManager in android runs every time i open the app每次我打开应用程序时,Android 中的 AlarmManager 都会运行
【发布时间】:2016-02-12 13:18:44
【问题描述】:

我有一个用于创建 alarmManager 主要活动的代码

Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 14);
c.set(Calendar.MINUTE, 41);
c.set(Calendar.SECOND, 0);
Intent intentAlarm = new Intent(this, AlarmReceiver.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC,c.getTimeInMillis(), pendingIntent.getBroadcast(this, 0, intentAlarm, pendingIntent.FLAG_ONE_SHOT));

AlarmReceive 课程中我有:

public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Alarm Scheduled for Tommrrow", Toast.LENGTH_LONG).show();
    intent = new Intent(context, firstservice.class);
    context.startService(intent);
}

在服务firstservice我做了一些操作。问题是警报会按时调用广播接收器,但之后当我打开应用程序时它也会调用广播接收器,这意味着该服务再次工作。

【问题讨论】:

  • 您也必须设置日期。设置为今天。

标签: android service alarmmanager


【解决方案1】:

我也有这个问题。几个小时后,我可以指出这个解决方案的问题。简而言之,我使用了 Intent Extras 来通知闹钟时间。

在 manifest.xml 中,注册接收者。

 <receiver android:name=".receivers.DayAlarmReceiver"/>

这就是我设置警报管理器的方式

 public void setDayAlarm(Context context) {

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 4);

    AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent alarmIntent = new Intent(context, DayAlarmReceiver.class);
    alarmIntent.putExtra("HOUR_OF_DAY", 4);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 5555, alarmIntent, 0);
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
    Log.d("Set the day alarm");

}

这是我的 DayAlarmReceiver 类的 OnReceive() 方法

@Override
public void onReceive(Context context, Intent intent) {
    int setHour = intent.getIntExtra("HOUR_OF_DAY", -1);
    Calendar rightNow = Calendar.getInstance();
    int currentHour = rightNow.get(Calendar.HOUR_OF_DAY);

    if(currentHour == setHour){
        Log.d("This is perfect, Trigger the alarm");
        showNotification(context, msg);
    }else{
       Log.d("This is perfect, Trigger the alarm");

    }

编码愉快:)

【讨论】:

    【解决方案2】:

    尝试在您的意图中添加额外内容并检查它以区分您的预定警报与您的接收器服务的任何其他广播

    ...
    c.set(Calendar.SECOND, 0);
    Intent intentAlarm = new Intent(this, AlarmReceiver.class);
    intentAlarm.putExtra("myalarm",Boolean.TRUE)
    AlarmManager alarmManager = (AlarmManager) ...
    
    
    
    public void onReceive(Context context, Intent intent) {
         if (null != intent){
                 Bundle extras = intent.getExtras();
    
                 if(extras != null && extras.getBoolean("myalarm", Boolean.TRUE)){
                      //Do your actions  ...  
                 }
          }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多