我正在使用警报管理器在特定时间启动服务,该服务工作正常,但是现在如果用户更改了设备时间,则服务将根据该时间启动。
代码:
calendar = new GregorianCalendar();
calendar.setTimeInMillis(System.currentTimeMillis());
cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 57);
cal.set(Calendar.SECOND, calendar.get(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, calendar.get(Calendar.MILLISECOND));
cal.set(Calendar.DATE, calendar.get(Calendar.DATE));
cal.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent it = new Intent(MainActivity.this,Start_service_alarm.class);
it.putExtra(Start_service_alarm.ACTION, Start_service_alarm.ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, it, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
答案 0 :(得分:0)
设备只知道当前设置的时间(可以从外部互联网或移动网络源自动确定,但也可以被用户覆盖)。
您需要有一个与您的应用程序同步的外部时间提供程序,可能会发送其位置,以便服务器可以确定正确的时区。
已经有apis可用,例如:http://timezonedb.com/api,或者你可以自己动手