【问题标题】:How to use real local time for alarm manager instead of device set time如何将实时本地时间用于警报管理器而不是设备设置时间
【发布时间】:2015-07-19 00:01:26
【问题描述】:

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

代码:

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

【问题讨论】:

  • @Manish 怎么用?
  • 我猜你可能需要依赖你的服务器。您可以要求设置闹钟的时间。
  • @MehulJoisar 无论设备时间如何,我都不能在 android 中获得实时吗?
  • @EdwardCollins:AFAIK,你不能。见reference
  • @MehulJoisar 我想让警报管理器在本地时间而不是设备设置时间上工作怎么可能

标签: android real-time alarmmanager


【解决方案1】:

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

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

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

【讨论】:

  • 如果设备只“知道”用户可能设置的当前时间,那么我假设警报管理器在决定何时触发警报时只能关闭该时间。可能您能做的最好的事情是使用外部时间源来获取“实时”时间,并根据“实时”时间和“设备”时间之间的差异设置闹钟时间。 (您可能会根据外部“实时”时间提供(重新)设置设备时间,但即使您不需要需要用户确认来执行此操作,您也应该询问)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多