Java AlarmManager没有';我不愿意为你效劳

Java AlarmManager没有';我不愿意为你效劳,java,android,service,alarmmanager,utc,Java,Android,Service,Alarmmanager,Utc,我将AlarmManager设置如下: Intent startIntent = new Intent(context, MyService.class); PendingIntent pendingIntent = PendingIntent.getService(context, 0, startIntent, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIn

我将AlarmManager设置如下:

Intent startIntent =  new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, startIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
Log.d(TAG, "Current time is " + System.currentTimeMillis());
Log.d(TAG, "Next alarm time is: " + (alarmManager.getNextAlarmClock().getTriggerTime() - System.currentTimeMillis()));
它表明
当前时间是149990969678520
下次报警时间为:55521479

我认为RTC是使用System.currentTimeMillis()的UTC时间。下一个警报是否应小于3000

仅供参考,在我的服务中,我是这样处理的:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
  Log.i(TAG, "MyService started");
}

我的服务从未开始。出什么问题了?

重复报警使用:

// Alarm time :: Current time
Calendar calendar = Calendar.getInstance() ;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);

// Interval
long interval = 3000; // 3 seconds

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
而不是:

// Alarm time :: Current time
Calendar calendar = Calendar.getInstance() ;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);

// Interval
long interval = 3000; // 3 seconds

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);

确保您已在
AndroidManifest.xml
中声明了
MyService
,以便重复报警使用:

// Alarm time :: Current time
Calendar calendar = Calendar.getInstance() ;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);

// Interval
long interval = 3000; // 3 seconds

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
而不是:

// Alarm time :: Current time
Calendar calendar = Calendar.getInstance() ;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);

// Interval
long interval = 3000; // 3 seconds

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);

确保您已经在
AndroidManifest.xml
中声明了
MyService
,我在显示日志时犯了一个愚蠢的错误。所以,我的代码实际上是有效的。但是,我猜alarmManager.getNextAlarmClock().getTriggerTime()没有以UTC返回,这导致System.currentTimeMills()出现差异。

我在显示日志时犯了一个愚蠢的错误。所以,我的代码实际上是有效的。但是,我猜alarmManager.getNextAlarmClock().getTriggerTime()没有以UTC返回,这导致System.currentTimeMills()出现差异。

我的服务是用android:exported=“false”声明的。我想设置一个一次性警报,而不是重复警报。哦。。。对于单警报,我认为您的代码似乎很好。我的服务是用android:exported=“false”声明的。我想设置一个一次性警报,而不是重复警报。哦。。。对于单闹钟,我认为您的代码似乎很好
getNetAlarmClock()
返回计划的下一个闹钟。我无法从你发布的代码中判断你是否已经安排了()
alarmManager.set()
创建意图广播。您将需要一个广播接收器来接收挂起的意图并对其进行操作(,long,android.app.pendingent))。请注意,该警报是一个意图广播,发送到您注册的广播接收器
getNetAlarmClock()
返回计划的下一个闹钟。我无法从你发布的代码中判断你是否已经安排了()
alarmManager.set()
创建意图广播。您将需要一个广播接收器来接收挂起的意图并对其进行操作(,long,android.app.pendingent))。请注意,报警线是一个目的广播,发送到您注册的广播接收器