1. 程式人生 > >Android72JB平臺預設開啟GPS

Android72JB平臺預設開啟GPS


1. 在alps/mediatek/config/mp3_natgas/sagereal_copy/defaults.xml檔案中,設定is_first_boot_to_open_gps為true

<bool name="is_first_boot_to_open_gps">true</bool>

2. 在alps/mediatek/config/mp3_natgas/sagereal_copy/frameworks/base/core/java/android/provider/Settings.java的SETTINGS_TO_BACKUP陣列中新增IS_FIRST_BOOT_TO_OPEN_GPS變數

public static final String[] SETTINGS_TO_BACKUP = {
    ......
    ,IS_FIRST_BOOT_TO_OPEN_GPS
}

3. 在alps/mediatek/config/mp3_natgas/sagereal_copy/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java檔案的loadSystemSettings方法中,把is_first_boot_to_open_gps和IS_FIRST_BOOT_TO_OPEN_GPS設定成對映關係

loadBooleanSetting(stmt, Settings.System.IS_FIRST_BOOT_TO_OPEN_GPS,R.bool.is_first_boot_to_open_gps);

其中loadBooleanSetting方法為:

    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
        loadSetting(stmt, key, mContext.getResources().getBoolean(resid) ? "1" : "0");
    }

    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
        stmt.bindString(1, key);
        stmt.bindString(2, value.toString());
        stmt.execute();
    }

4. 在alps/mediatek/config/mp3_natgas/sagereal_copy/Launcher.java的onResume()方法中,若符合要求,則開啟GPS。

boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(
        getContentResolver(), LocationManager.GPS_PROVIDER);

boolean isFirstBoot = Settings.System.getInt(getContentResolver(),
                            Settings.System.IS_FIRST_BOOT_TO_OPEN_GPS, 1) != 0;

if (gpsEnabled && isFirstBoot) {
    Settings.Secure.setLocationProviderEnabled(getContentResolver(),
            LocationManager.GPS_PROVIDER, false);//工廠模式下可能搜不到星,重啟一次GPS

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(2*1000);//sleep 2s is good for search star about factory test
                Settings.Secure.setLocationProviderEnabled(getContentResolver(),
                        LocationManager.GPS_PROVIDER, true);
                Settings.System.putInt(getContentResolver(),Settings.System.IS_FIRST_BOOT_TO_OPEN_GPS, 0) ;

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();        
}

5. 在alps/packages/apps/Settings/src/com/android/settings/LocationSettings.java的updateLocationToggles方法中,會讀取GPS的開關狀態,並設定。

private void updateLocationToggles() {
    ContentResolver res = getContentResolver();
    boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(res, LocationManager.GPS_PROVIDER);
    mGps.setChecked(gpsEnabled);
}

注:此時只會針對mp3_natgas專案進行修改,不會影響其他專案。[參考Android80go平臺的桌面佈局(帶gms)主幹修改和專案拷貝路徑修改]