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)的主干修改和项目拷贝路径修改]