自动设置时间续

客户测试得到结论是“自动获取时间”不选任然会从网络上获取时间及更新。
查看了
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_TIME_TICK);
        filter.addAction(Intent.ACTION_TIME_CHANGED);
        filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
        registerReceiver(mIntentReceiver, filter, null, null);
这些INTENT都没有结果。
后来在界面中测试发现一个规律:
取消“auto time”,然后“select time zone”,“set time”, “Use 24-hour format”, “Select date format”等选项的改变都不会去更新时间,唯独“set date”这项,在改变year的时候会有去网络更新时间的动作,而且是在改变后的year比当前year要大时才动作,如果小则还是不会触发。 例如2012年改为2013年点确定然后就会自动更新,而2012年改为2010年等小些的年份则不会自动更新。
log如下:
# D/SystemClock(  362): Setting time of day to sec=1363240369
smdkc110-rtc smdkc110-rtc: rtc disabled, re-enabling
I/EventLogService(  330): Aggregate from 1331704345962 (log), 1331962934668 (data)
I/CheckinService(  330): Preparing to send checkin request
I/EventLogService(  330): Accumulating logs since 1363240369496
D/ResourceType(  330): calling getConfigurations
D/ResourceType(  330): called getConfigurations size=243
I/CheckinTask(  330): Sending checkin request (952 bytes)
E/CheckinTask(  330): SSL error, attempting time correction: javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: current time: Thu Mar 14 13:52:50 GMT+08:00 2013, expiration time: Fri Mar 08 16:53:51 GMT+08:00 2013
smdkc110-rtc smdkc110-rtc: rtc disabled, re-enabling
W/CheckinTask(  330): Setting time from 1363240370708 to 1331963570459
D/SystemClock(   83): Setting time of day to sec=1331963570
D/ResourceType(  330): calling getConfigurations
D/ResourceType(  330): called getConfigurations size=243
I/CheckinTask(  330): Checkin success: https://android.clients.google.com/checkin (1 requests sent)

在设备中查询可得到 CheckinService其实是在GoogleServiceFramework.apk中的,没有源代码无法修改。
在试过其他方法无果后,决定反编译GoogleServiceFramework.apk看是否能得到一些有用的信息,反编译后查询到
I/CheckinService(  330): Preparing to send checkin request
存在于com.google.android.gsf/checkin/CheckinService$1
class CheckinService$1 extends CheckinTask
{
  public ProtoBuf doInBackground(CheckinTask.Params[] paramArrayOfParams)
  {
    int i = 0;
    ProtoBuf localProtoBuf;
    while (CheckinService.access$100(this.this$0))
    {
      Log.i("CheckinService", "Preparing to send checkin request");
      EventLogService.captureLogs(this.this$0);
      localProtoBuf = super.doInBackground(paramArrayOfParams);
      CheckinService.access$200(this.this$0, localProtoBuf);
    }
    return localProtoBuf;
  }

看到doInBackground就怀疑是不是后台传输的问题,于是到“Accounts & sync settings”中,关掉“Background data”,然后再在时间中设置,果然不会再变化!   测试M9,也是如此。

所以修改系统让后台数据功能默认关闭。
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
    <bool name="def_install_non_market_apps">true</bool>
    <!-- jeff add default background data on/off. -->
    <bool name="def_background_data">false</bool>
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
private void loadSecureSettings(SQLiteDatabase db) {
            //jeff. def background data.
            loadBooleanSetting(stmt, Settings.Secure.BACKGROUND_DATA,
                    R.bool.def_background_data);
    
默认不开启后台数据,算是对这个问题的一个解决方法。

你可能感兴趣的:(Date,网络,timezone,测试,filter,null)