生活随笔
收集整理的這篇文章主要介紹了
Android 5.1 修改系统默认语言
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
折騰了下下這個很2的問題。
網上放的方法比較舊, Android5.1的話, 設置后當時生效, 重啟后就失效了。
private void updateLanguage(Locale locale) {
try {Object objIActMag, objActMagNative;Class clzIActMag = Class.forName(
"android.app.IActivityManager");Class clzActMagNative = Class.forName(
"android.app.ActivityManagerNative");Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod(
"getDefault");objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod(
"getConfiguration");Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);config.locale = locale;Class clzConfig = Class.forName(
"android.content.res.Configuration");java.lang.reflect.Field userSetLocale = clzConfig.getField(
"userSetLocale");userSetLocale.set(config,
true);Class[] clzParams = { Configuration.class };Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
"updateConfiguration", clzParams);mtdIActMag$updateConfiguration.invoke(objIActMag, config);BackupManager.dataChanged(
"com.android.providers.settings");}
catch (Exception e) {e.printStackTrace();}}
不同的地方在添加了
Class clzConfig = Class.forName(
"android.content.res.Configuration");
java.lang.reflect.Field userSetLocale = clzConfig.getField(
"userSetLocale");
userSetLocale.set(config,
true);
Debug發現的邏輯是:
1: 持久化保存下來
SystemProperties.set("
persist.sys.language",
l.getLanguage());
SystemProperties.set("
persist.sys.country",
l.getCountry());
2: 開機AndroidRuntime讀取這個屬性, 更新系統之前的屬性。
估計是為了方便跑測試的Case添加的這個邏輯。
總結
以上是生活随笔為你收集整理的Android 5.1 修改系统默认语言的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。