Android2.3中,网络时间更新是通过GSM和CDMA的电信移动网络来实现的,但是现在很多MID都没有GSM和CDMA,所以,没有实现网络更新。
在 “设置” ——> “日期和时间” ——> “自动” 选项实习网络时间更新
由于项目需要,我用了点时间去实现了通过wifi实习网络时间更新,如下
直接修改android源码中的Settings源码
1、附件中SNTP.java文件是一个wifi时间更新Service ,该Service如果没有成功获取网络时间则会每隔一段时间去程序获取网络时间,直到成功获取网络时间为止。
2、修改Settings\src\com\android\settings\DeviceInfoSettings.java,在onSharedPreferenceChanged函数中
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key.equals(KEY_DATE_FORMAT)) {
String format = preferences.getString(key,
getResources().getString(R.string.default_date_format));
Settings.System.putString(getContentResolver(),
Settings.System.DATE_FORMAT, format);
updateTimeAndDateDisplay();
} else if (key.equals(KEY_AUTO_TIME)) {
boolean autoEnabled = preferences.getBoolean(key, true);
/* add at 2011.6.21 */
if( autoEnabled ){
Log.d("---------->"," startService !! " );
Intent intent = new Intent(DateTimeSettings.this,SNTP.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
}else{
Log.d("---------->"," endService !! " );
Intent intent = new Intent(DateTimeSettings.this,SNTP.class);
stopService(intent) ;
}
Settings.System.putInt(getContentResolver(),
Settings.System.AUTO_TIME,
autoEnabled ? 1 : 0);
mTimePref.setEnabled(!autoEnabled);
mDatePref.setEnabled(!autoEnabled);
mTimeZone.setEnabled(!autoEnabled);
}
}
3、在packages\apps\Settings\AndroidManifest.xml中注册service
<service android:name=".sntp.SNTP"
android:exported="true"
android:process=":remote">
</service>
中国大概能用的NTP服务器地址
133.100.11.8 prefer
210.72.145.44
203.117.180.36
131.107.1.10
time.asia.apple.com
64.236.96.53
130.149.17.21
66.92.68.246
www.freebsd.org
18.145.0.30
clock.via.net
137.92.140.80
133.100.9.2
128.118.46.3
ntp.nasa.gov
129.7.1.66ntp-sop.inria.frserver 210.72.145.44(中国国家授时中心服务器IP地址)