我正在尝试使用AlarmManager
来安排任务在预定义的时间运行。
这个AlarmManager
是从我的应用程序初始化的,并且在后台运行(运行良好),当在Broadcast
方法中收到onReceive()
事件时,我使用context.startService(webServiceIntent);
调用服务我试图重新安排这个PendingIntent
,在15分钟后打电话说';但由于某些原因,它无法正常工作。所有这一切都会阻止PendingIntent
。
以下是相关来源:
//Initiliazing AlarmManager from my app
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
pendingIntent = PendingIntent.getBroadcast(this, 0, getLocationPollerIntent(), 0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), Constant.LOCATION_POLLING_PERIOD, pendingIntent);
//onReceive Method of BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
Intent webServiceIntent = new Intent(context, LocationNotificationService.class);
webServiceIntent.putExtra("UPDATED_LOCATION", loc);
context.startService(webServiceIntent);
}
//Inside LocationNotificationService to reschedule the PendingIntent - This PendingIntent never get called
protected void onHandleIntent(Intent intent) {
c.set(Calendar.HOUR_OF_DAY, 13);
c.set(Calendar.MINUTE, 35);
c.set(Calendar.SECOND, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, getLocationPollerIntent(), PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, c.getTimeInMillis(), Constant.LOCATION_POLLING_PERIOD, pendingIntent);
}
答案 0 :(得分:0)
问题#1:SystemClock.elapsedRealtime()
可能已经过去,如果在setRepeating()
来电期间毫秒超过了。确保您指定将来的时间。
问题#2:如果您在设备的当前时区13:35
之后运行此代码,那么13:35
可能已经过去了。确保您指定将来的时间。
问题#3:许多人在startService()
电话和onHandleIntent()
之间睡着了,这就是我写WakefulIntentService
的原因。