最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

[RK3288][Android6.0] WiFi之同步网络时间过程

常识 admin 5浏览 0评论

[RK3288][Android6.0] WiFi之同步网络时间过程

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

Android从外部同步时间的方式有两种
1. 从运营商获取,也就是插SIM卡的方式获取,运营商提供时间和时区,用的是NITZ协议
2. 网络获取时间,也就是WIFI或GPS的方式获取,网络只能提供时间,用的是SNTP协议(NTP协议的精简版)

这里关注在连接Wifi的情况下,开启自动获取时间,这时会调用:
onSharedPreferenceChanged -> DateTimeSettings.java //在initUI()初始化监听

public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
    if (key.equals(KEY_AUTO_TIME)) {
        boolean autoEnabled = preferences.getBoolean(key, true);
        //设置AUTO_TIME为enable到ContentProvider中
        Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME,
                autoEnabled ? 1 : 0);
        mTimePref.setEnabled(!autoEnabled);
        mDatePref.setEnabled(!autoEnabled);
    } else if (key.equals(KEY_AUTO_TIME_ZONE)) {
        boolean autoZoneEnabled = preferences.getBoolean(key, true);
        Settings.Global.putInt(
                getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
        mTimeZone.setEnabled(!autoZoneEnabled);
    }
}

另一方面,SettingsObserver监听Settings.Global.AUTO_TIME的变化,使用的是observer机制,机制可查看后面参考

private static class SettingsObserver extends ContentObserver {
   
    void observe(Context cont

[RK3288][Android6.0] WiFi之同步网络时间过程

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

Android从外部同步时间的方式有两种
1. 从运营商获取,也就是插SIM卡的方式获取,运营商提供时间和时区,用的是NITZ协议
2. 网络获取时间,也就是WIFI或GPS的方式获取,网络只能提供时间,用的是SNTP协议(NTP协议的精简版)

这里关注在连接Wifi的情况下,开启自动获取时间,这时会调用:
onSharedPreferenceChanged -> DateTimeSettings.java //在initUI()初始化监听

public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
    if (key.equals(KEY_AUTO_TIME)) {
        boolean autoEnabled = preferences.getBoolean(key, true);
        //设置AUTO_TIME为enable到ContentProvider中
        Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME,
                autoEnabled ? 1 : 0);
        mTimePref.setEnabled(!autoEnabled);
        mDatePref.setEnabled(!autoEnabled);
    } else if (key.equals(KEY_AUTO_TIME_ZONE)) {
        boolean autoZoneEnabled = preferences.getBoolean(key, true);
        Settings.Global.putInt(
                getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
        mTimeZone.setEnabled(!autoZoneEnabled);
    }
}

另一方面,SettingsObserver监听Settings.Global.AUTO_TIME的变化,使用的是observer机制,机制可查看后面参考

private static class SettingsObserver extends ContentObserver {
   
    void observe(Context cont
发布评论

评论列表 (0)

  1. 暂无评论