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

My AlarmManager triggers every time service is run, not at set time

我正在尝试创建一个 SMS 应用程序,它在一天中的一个设定时间发送 SMS。为此,我创建了两个服务 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 中的值是否正确...

有人知道为什么会这样吗?

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

我想我在某处读到过您现在使用的服务仅用于文件操作。但我不是 100%。

看来是因为我设置的触发时间过去了。这意味着 AlarmManager 会立即触发,而不是在下一次设置的时间出现时触发。