我的 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 会立即触发,而不是在下一次设置的时间出现时触发。
我正在尝试创建一个 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 会立即触发,而不是在下一次设置的时间出现时触发。