NSSystemClockDidChangeNotification 是不是收到有关自动时区更新的通知(无需手动干预。例如,当用户正在旅行时)?

Posted

技术标签:

【中文标题】NSSystemClockDidChangeNotification 是不是收到有关自动时区更新的通知(无需手动干预。例如,当用户正在旅行时)?【英文标题】:Does NSSystemClockDidChangeNotification receive notification on automatic timezone updates(without manual intervention.eg when the user is travelin)?NSSystemClockDidChangeNotification 是否收到有关自动时区更新的通知(无需手动干预。例如,当用户正在旅行时)? 【发布时间】:2021-09-25 00:49:08 【问题描述】:

我们能否检测到手机的时区更改和用户专门更改时间的情况? android 也有同样的问题..我在哪里使用 intent.ActionTimeChanged ?

【问题讨论】:

【参考方案1】:

您需要在每个平台(ios / Android)上分别实现。

在 Android 上,您可以为Intent.ActionTimeChanged 注册一个BroadcastReceiver(如果需要,还可以注册Intent.ActionTimezoneChanged):

[BroadcastReceiver]
[IntentFilter(new[]  Intent.ActionTimeChanged )]
public class TimeChanged : BroadcastReceiver

    public override void OnReceive(Context context, Intent intent)
    
        Console.WriteLine("Time change, do something with that knowledge");
    

在 iOS 上,您可以注册NSSystemClockDidChange 通知:

NSNotificationCenter.DefaultCenter.AddObserver(new NSString("NSSystemClockDidChangeNotification"), (obj) =>

    Console.WriteLine("Time change, do something with that knowledge");
);

我测试了我这边的解决方案,它工作正常。

请参阅https://***.com/a/56141207/8187800。

【讨论】:

使用 NSSystemClockDidChange (iOS) 和 intent.ActionTimeChanged(android),只要用户手动更改日期/时间,就会收到通知。但是,当“系统”通过时区更改更改时间时也会收到此通知,例如当一个人前往不同的时区时?如果是这种情况,那么有没有办法忽略该事件..以便只能捕获用户所做的手动时间更改? 是的,我认为该事件仅由用户手动更改时间触发。

以上是关于NSSystemClockDidChangeNotification 是不是收到有关自动时区更新的通知(无需手动干预。例如,当用户正在旅行时)?的主要内容,如果未能解决你的问题,请参考以下文章