Android ACTION_DATE_CHANGED广播

扎克

我有Nexus S,并且当我在手机上手动更改日期时,ACTION_DATE_CHANGED并不总是播放。如果我将日期从2014年2月13日更改为2014年2月14日,则我尚未获得ACTION_DATE_CHANGED的支持,但如果将其设置为未来几年,有时会触发。

我可以(99%)向您保证,我不会滥用IntentFilters,BroadcastReceivers等。我很好奇为什么此广播的记录如此糟糕。通过SO和Google进行的快速扫描显示,人们不确定用户手动更改日期还是每天凌晨12:00滚动日期还是两者同时发生。我的经验表明,这与用户更改非常不一致,而且我还没有尝试过系统更改。

我将遍历AOSP代码,并隔离触发它的所有点并进行报告。

编辑:问题:任何人都知道这是怎么回事吗?:-)

扎克

这是来自frameworks / base / services / java / android / server / AlarmManagerService.java中的4.0.3_r1的代码。

首先,我们创建一个PendingIntent mDateChangeSender;

private final PendingIntent mDateChangeSender;

然后,在AlarmManagerService.java的构造函数中,我们设置PendingIntent:

Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
mDateChangeSender = PendingIntent.getBroadcast(context, 0, intent, 0);

然后在构造函数中:

mClockReceiver.scheduleDateChangedEvent();

那么什么是mClockReceiver?只是一个广播接收器正在监听Intent.ACTION_TIME_TICK和Intent.ACTION_DATE_CHANGED。在它的onReceive()中:

...
else if (intent.getAction().equals(Intent.ACTION_DATE_CHANGED)) {
...
    scheduleDateChangedEvent();
}

然后,稍后我们找到方法scheduleDateChangedEvent():

public void scheduleDateChangedEvent() {
     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(System.currentTimeMillis());
     calendar.set(Calendar.HOUR, 0);
     calendar.set(Calendar.MINUTE, 0);
     calendar.set(Calendar.SECOND, 0);
     calendar.set(Calendar.MILLISECOND, 0);
     calendar.add(Calendar.DAY_OF_MONTH, 1);
     set(AlarmManager.RTC, calendar.getTimeInMillis(), mDateChangeSender);
}

因此,它设置了一次警报,从当前时间开始,然后将小时/分钟/秒/毫秒设置为零,然后添加一天,因此,如果今天是下午1:30,则下次将被触发在10小时30分钟内。

这并不是说这里没有bug或其他东西,但是类似ACTION_DATE_CHANGED这样的外观应该每天在午夜触发。

现在-如果我要更改手机上的日期,可以说是未来10年。处理时间变化的代码将触发第一个ACTION_DATE_CHANGED事件,然后安排新的ACTION_DATE_CHANGED被触发,时间为10年+一天的某个时间。然后,如果我们将日期改回10年(正确的日期),则仍将按10年触发警报,因此ACTION_DATE_CHANGED将不再被触发(除非您将日期设置为从现在起超过10年-尝试一下! )。

tl; dr:这是Android中的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android ACTION_DATE_CHANGED广播

来自分类Dev

Android:从未收到广播ACTION_MY_PACKAGE_REPLACED

来自分类Dev

无法获得ACTION_PACKAGE_REMOVED广播-Android 10 /设置

来自分类Dev

android何时会广播意图ACTION_PACKAGE_NEEDS_VERIFICATION?

来自分类Dev

在Android中使用广播

来自分类Dev

android广播权限

来自分类Dev

Android中的广播组

来自分类Dev

Android电池广播

来自分类Dev

拒绝权限:不允许发送广播android.intent.action.AIRPLANE_MODE

来自分类Dev

Android 6.0-蓝牙-Action_Found广播意图没有代码

来自分类Dev

android.intent.action.BOOT_COMPLETED-如果通过电话启动完成,则不会接收广播

来自分类Dev

Wifi广播android内部的android意图

来自分类Dev

Wifi广播android内部的android意图

来自分类Dev

Android连接更改广播顺序

来自分类Dev

Android通过界面发送广播

来自分类Dev

Android通过界面发送广播

来自分类Dev

在Android上广播概念证明

来自分类Dev

接收广播Intent时出错{act = android.bluetooth.device.action.FOUND flg = 0x10}

来自分类Dev

java.lang.SecurityException:权限拒绝:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

来自分类Dev

java.lang.SecurityException:权限拒绝:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

来自分类Dev

android连接到wifi WifiManager.SUPPLICANT_STATE_CHANGED_ACTION奇怪的问题

来自分类Dev

使Android Action Bar透明

来自分类Dev

Android:本机代码能否从Android系统获取广播意图?

来自分类Dev

Android-在广播中使用URI权限

来自分类Dev

订阅了Android中的应用内续订广播

来自分类Dev

在Android中更改按钮样式的广播组

来自分类Dev

短信可以中止在Android 5上广播

来自分类Dev

在Android中合并2个广播组

来自分类Dev

通过UDP在Android中广播的PING URL?

Related 相关文章

  1. 1

    Android ACTION_DATE_CHANGED广播

  2. 2

    Android:从未收到广播ACTION_MY_PACKAGE_REPLACED

  3. 3

    无法获得ACTION_PACKAGE_REMOVED广播-Android 10 /设置

  4. 4

    android何时会广播意图ACTION_PACKAGE_NEEDS_VERIFICATION?

  5. 5

    在Android中使用广播

  6. 6

    android广播权限

  7. 7

    Android中的广播组

  8. 8

    Android电池广播

  9. 9

    拒绝权限:不允许发送广播android.intent.action.AIRPLANE_MODE

  10. 10

    Android 6.0-蓝牙-Action_Found广播意图没有代码

  11. 11

    android.intent.action.BOOT_COMPLETED-如果通过电话启动完成,则不会接收广播

  12. 12

    Wifi广播android内部的android意图

  13. 13

    Wifi广播android内部的android意图

  14. 14

    Android连接更改广播顺序

  15. 15

    Android通过界面发送广播

  16. 16

    Android通过界面发送广播

  17. 17

    在Android上广播概念证明

  18. 18

    接收广播Intent时出错{act = android.bluetooth.device.action.FOUND flg = 0x10}

  19. 19

    java.lang.SecurityException:权限拒绝:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

  20. 20

    java.lang.SecurityException:权限拒绝:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

  21. 21

    android连接到wifi WifiManager.SUPPLICANT_STATE_CHANGED_ACTION奇怪的问题

  22. 22

    使Android Action Bar透明

  23. 23

    Android:本机代码能否从Android系统获取广播意图?

  24. 24

    Android-在广播中使用URI权限

  25. 25

    订阅了Android中的应用内续订广播

  26. 26

    在Android中更改按钮样式的广播组

  27. 27

    短信可以中止在Android 5上广播

  28. 28

    在Android中合并2个广播组

  29. 29

    通过UDP在Android中广播的PING URL?

热门标签

归档