如何使用实际本地时间作为报警管理器而不是设备设置时间

时间:2015-05-08 06:54:45

标签: android real-time alarmmanager

我正在使用警报管理器在特定时间启动服务,该服务工作正常,但是现在如果用户更改了设备时间,则服务将根据该时间启动。

代码:

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(), 

1 个答案:

答案 0 :(得分:0)

设备只知道当前设置的时间(可以从外部互联网或移动网络源自动确定,但也可以被用户覆盖)。

您需要有一个与您的应用程序同步的外部时间提供程序,可能会发送其位置,以便服务器可以确定正确的时区。

已经有apis可用,例如:http://timezonedb.com/api,或者你可以自己动手