2015-10-15 111 views
2

我想让Alarmmanager在2秒后首次触发,然后每隔10秒触发一次。Alarmmanager第一次触发但不重复

2秒后它不会第一次开火。 5到10秒之后。它根本不重复。

这里是我的代码:

Alarmmanager:

Intent intent = new Intent(this, BackgroundService.class); 
final PendingIntent pendingintent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0); 

final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + 2 * 1000, 10 * 1000, pendingintent); 

清单:

<receiver android:process=":remote" android:name=".BackgroundService"/> 

BackgroundService.java:

public class BackgroundService extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("BackgroundService", "BackgroundService onReceive"); 
    } 
} 
+1

尽量不要使用AlarmManager类。 – Owner

+0

还有什么?那么为何不? – Michael

+0

Intent i = new Intent(AlarmClock.ACTION_SET_ALARM); – Owner

回答

3

明白了:

的IDE说:第三届值将被强制高达60000(1分钟),以节省电池。但我从未等过这么久,所以看起来它甚至没有重复。

Snap is here

1
am.setRepeating(AlarmManager.RTC_WAKEUP, **cal_alarm.getTimeInMillis()**, 1000*60*5 , pendingIntent); 

我想你正在使用System.currentTimeMillis(),因为你有这个问题。尝试从您设置了闹钟的代码中获取时间。上述代码中的第三个参数是重复时间。你可以将它设置为10秒。

+0

我将它改为:'Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND,2); alarmManager.setRepeating(AlarmManager.RTC,calendar.getTimeInMillis(),2000,pendingintent);' 同样的结果 – Michael

+0

Date dat = new Date(); 日历cal_alarm = Calendar.getInstance(); 日历cal_now = Calendar.getInstance(); cal_now.setTime(dat); cal_alarm.setTime(dat); cal_alarm.set(Calendar.HOUR_OF_DAY,10); cal_alarm.set(Calendar.MINUTE,43); cal_alarm.set(Calendar.SECOND,0); – Owner

+0

我的意思是你为闹钟设定的时间,因为你想让闹钟设置为早上5点半。将cal_alarm设置为该值。 – Owner

0

这heslp我

if (android.os.Build.VERSION.SDK_INT >= 19) { 
       alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
      } else { 
       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
      }