完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: Rockchip
OS: Android 6.0 Kernel: 3.10.92 Android从外部同步时间的方式有 1. 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的机制,使用Global.AUTO_的机制,使用机制可以查看后面的observer 私有静态类SettingsObserver extends ContentResolver ( Observer ) resolver.registerContentObserver(Settings.Global.getUriFor(Settings.Global.AUTO_TIME), false, this); } } 当Settings.Global.AUTO_TIME_CHANGED事件发生变化时,SettingsObserver被收到EVENT_AUTO_TIME_CHANGED事件触发 private static class SettingsObserver extends ContentObserver { @Override public void onChange(boolean selfChange) { //发给handler处理 mHandler.obtainMessage(mMsg).sendToTarget(); } } public void handleMessage(Message msg) { switch (msg.what) { case EVENT_AUTO_TIME_CHANGED: case EVENT_POLL_NETWORK_TIME: case EVENT_NETWORK_CHANGED: onPollNetworkTime(msg.what); 休息; } } onPollNetworkTime-》 onPollNetworkTimeUnderWakeLock private void onPollNetworkTimeUnderWakeLock(int event) { //系统引导时间 最终长 refTime = SystemClock.elapsedRealtime(); // 如果收到的 NITZ 时间小于 mPollingIntervalMs 时间, // 不需要同步到 NTP。 //如果已经从运行商(有SIM卡)那里获取过时间并且在mPollingIntervalMs的情况下设置,那么就不再设置NTP了 //mPollingIntervalMs在framework/base/core/res/res/values/config .xml配置,为864000000,也就是10天 if (mNitzTimeSetTime != NOT_SET && refTime - mNitzTimeSetTime 《 mPollingIntervalMs) { resetAlarm(mPollingIntervalMs); 返回; } final long currentTime = System.currentTimeMillis(); if (DBG) Log.d(TAG, “系统时间 = ” + currentTime); // 获取 NTP 时间 if (mLastNtpFetchTime == NOT_SET || refTime 》= mLastNtpFetchTime + mPollingIntervalMs || event == EVENT_AUTO_TIME_CHANGED) { if (DBG) Log.d(TAG, “Before Ntp fetch”); // 过期时强制刷新NTP缓存 //如果即N缓存超过了10天,就重获取,mTime.getCacheAge () 》= mPollingIntervalMs) { mTime.forceRefresh(); } // 仅在 NTP 时间新鲜时更新 //NTP 时间后刷新本地时间, if (mTime.getCacheAge() 《 mPollingIntervalMs) { final long ntp = mTime.currentTimeMillis(); mTryAgainCounter = 0; // 如果时钟关闭超过 N 秒,或者这是 自启动以来第一次 // 获取它,请设置当前时间。 //当NTP与本地时间的差比mTimeErrorThresholdMs大时更新时间 if (Math.abs(ntp - currentTime) 》 mTimeErrorThresholdMs || mLastNtpFetchTime == NOT_SET) { // 设置系统时间 if (DBG && mLastNtpFetchTime == NOT_SET && Math.abs(ntp - currentTime) 《= mTimeErrorThresholdMs) { Log.d(TAG, “For initial setup, rtc = ” + currentTime ); } if (DBG) Log.d(TAG, “要设置的 Ntp 时间 = ” + ntp); // 确保我们没有溢出,因为它将被转换为 int if (ntp / 1000 《 Integer.MAX_VALUE) { // 设置成本时间 SystemClock.setCurrentTimeMillis(ntp); } } else { if (DBG) Log.d(TAG, “Ntp 时间足够接近 = ” + ntp); } mLastNtpFetchTime = SystemClock.elapsedRealtime(); if (mTryAgainTimesMax 《 0 || mTryAgainCounter 《= mTryAgainTimesMax) { resetAlarm(mPollingIntervalShorterMs); } else { // 稍后 再试 mTryAgainCounter = 0; 重置警报(mPollingIntervalMs); } 返回; } } 重置警报(mPollingIntervalMs); } NtpTrustedTime.java: public boolean forceRefresh() { //sntp协议 final SntpClient client = new SntpClient(); //请求时间 if (client.requestTime(mServer, (int) mTimeout)) { mHasCache = true; mCachedNtpTime = client.getNtpTime(); //更新后会改变getCacheAge()的值,设置到本地时间会判断 mCachedNtpElapsedRealtime = client.getNtpTimeReference(); mCachedNtpCertainty = client.getRoundTripTime() / 2; 返回真; } 否则 { 返回假; } } mServer res.getString(com.android.internal.Rstring.config_ntpServer)的配置为。/core/res/res/values/values/config.xml 2.androidpool.ntp.org 文件为在时间是从这个远程的服务器获取的。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
544 浏览 0 评论
595 浏览 0 评论
从性能到成本,深度剖析 RK3588 与 RK3576 怎么选
427 浏览 0 评论
RK3588 原厂设计资料首次公开(规格书+原理图+设计说明+DDR参考),速抢
2036 浏览 0 评论
1123 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-14 02:07 , Processed in 0.349177 second(s), Total 42, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191