每次运行服务时,我的AlarmManager都会触发,而不是在设定的时间触发

时间:2016-10-30 13:06:38

标签: android service calendar sms alarmmanager

我正在尝试创建一个短信应用,它可以在一天中的一个时间发送短信。为此,我创建了两个服务SendMessagePeriodicService和SendMessageService。

这是我的SendMesagePeriodicService,它应该在一天的设定时间触发SendMessageService。问题是每次调用onStartCommand方法时都会触发...

public class SendMessagePeriodicService extends Service {

@Nullable
@Override
public IBinder onBind(Intent intent) {
   return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) { //FIXME

    Calendar cal = Calendar.getInstance();

    Intent i =  new Intent(this, SendMessageService.class);
    PendingIntent pintent = PendingIntent.getService(this,  0,  i,  PendingIntent.FLAG_UPDATE_CURRENT);


    cal.set(Calendar.MINUTE, PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("minute", -1));
    cal.set(Calendar.HOUR_OF_DAY, PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("hour", -1));
    AlarmManager alarm  = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent); 

    return Service.START_NOT_STICKY;
}
}

我还检查过sharedPreferences中的值是否正确......

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

我会通过在活动中设置alarmmanager而不是在警报触发时使用BroadcastReceiver发送短信来做到这一点。 我使用相同的技术在特定时间开始通知。

我想我已经阅读过你现在只使用文件操作的服务。但我不是100%。

答案 1 :(得分:0)

似乎发生这种情况的原因是我为触发时间设定的时间是过去的。这意味着AlarmManager会立即触发,而不是下次发生此设置时间。