1. 程式人生 > >Android 5.1 修改系統預設語言

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); // 此處需要宣告許可權:android.permission.CHANGE_CONFIGURATION // 會重新呼叫 onCreate(); 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 修改系統預設語言

折騰了下下這個很2的問題。網上放的方法比較舊, Android5.1的話, 設定後當時生效, 重啟後就失效了。 private void updateLanguage(Locale locale) { try {

Android 5.1修改SystemUi導航欄背景顏色

現在很多手機都是用虛擬按鍵了,但是很多手機的虛擬按鍵的導航欄背景顏色是黑色的,看起來其醜無比啊,比如華為; 要想看上去協調一些,當然是改成透明的啦,怎麼改呢?按照以往的思路,當然是直接改佈局檔案就可以了的,想想這個思路也沒錯,佈局檔案位於 frameworks/base/packages/S

[sg] Android 6.0 修改系統預設時區和修改12小時製為24小時制

修改預設時區 在最終編譯出的配置檔案build.prop增加屬性 persist.sys.timezone=Asia/Shanghai (我這裡預設選擇東八區上海,其他對應的時區在frameworks\base\core\res\res\xml\time_z

CentOS修改系統預設語言設定

檢視當前系統語言 echo $LANG   en_US.UTF-8 檢視安裝的語言包 locale   是否有en_US.UTF-8 安裝中文語言包yum groupinstall chinese-s

noip初賽整理1.4 & 1.5(軟體系統語言

計算機軟體系統                                                                          軟體系統                                  系統軟體      

Android替換/修改系統預設輸入法

各大輸入法的服務 ro.mtk_default_ime=com.tencent.qqpinyin.QQPYInputMethodService//預設qq輸入法 ro.mtk_default_ime=com.sohu.inputmethod.sogou.SogouIME//

Android 修改系統預設碟符名稱

1、修改路徑:frameworks/av/media/mtp/MtpServer.cpp 2、修改方法:MtpResponseCode MtpServer::doGetDeviceInfo() { mData.putString(string); // Man

Android系統預設語言改為中文

第一種方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh" echo "ro.product.locale.region=CN" 就可以修改Android系統預設語言為中文。 第二種方法:

Android 原始碼 修改系統預設橫屏

1:WindowManagerService: platform\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.class  具體改動的地方看程式碼吧,

Android菜鳥之學習android原始碼之三(修改系統預設橫屏)

好多小夥伴在開發平板產品的時候都會接到把系統預設豎屏改成預設橫屏的任務,網上查了許多的文章,有說改底層的c++檔案的,有說改系統編譯出來的一些配置檔案的,眾說紛紜,我當初也踩過了不少的坑,最終發現一種比較靠譜的方式,那就是修改WindowManagerServi

Android 5.1系統原始碼Wifi模組中wifiSettings原始碼分析

在看一下程式碼之前需要簡單瞭解wifi的基本知識: 802.11協議:wifi用到的是802.11b,802.11g(是802.11b的後繼標準) station:攜帶無線網絡卡的裝置,如智慧手機,筆記本,底層會啟動 wpa-supplicant:實現station對無

Android 修改系統預設時間格式

android系統第一次開機決定系統的時間格式的程式碼在frameworks層的SettingsProvider應用中。  1.新增xml配置 在frameworks\base\packages\SettingsProvider\res\values\defaults

Android 5.1系統禁止通知狀態列下拉

之前看了網上很多修改,感覺太繁瑣,修改程式碼太多,最後感覺還是自己找找,看能不能簡單點 diff --git a/android/frameworks/base/packages/SystemUI/s

Android 5.1系統動畫的調節

專案需要從系統級別將Activity過渡動畫全部關閉,在SettingsProvider中將TRANSITION_ANIMATION_SCALE設為0。 frameworks/base/packages/SettingsProvider/src/com/android/pr

Android 5.1設定預設輸入法

1,frameworks/base/core/res/res/values中的config.xml <string-array name="config_disabledUntilUsedPr

Android 4.1 Audio系統變化說明

興趣 oop cau none bstr sta 解決 應用 sco 轉自Android 4.1 Audio系統變化說明 Android 4.1,英文代號簡稱JB。在國人眼裏,JB這個詞還和動物有點關系。Google如此頻繁修改Android,終於推出了一個可以被大

Android 5.1 Settings源代碼簡要分析

lang oid inpu mini tty 之前 arch 概述 wro 轉載請註明出處,謝謝~http://blog.csdn.net/u011974987/article/details/51004854。 概述: 先聲明:本人工作快兩

RK3288 Android 5.1 韌體 編譯

官網連結:http://wiki.t-firefly.com/zh_CN/Firefly-RK3288/compile_android.html   以下內容為原文轉載+部分修改   編譯 Android 5.1 韌體 準備工作 編譯 Android 對機

Android 5.1 建立多級資料夾失敗之奇怪的問題

問題: Android 5.1 建立多級資料夾失敗之奇怪的問題 原始碼: /** * 判斷資料夾是否建立 */ private static String foundFolder(String... str){ int length = str.length; String

Android 5.1 乙太網服務啟動過程

1.SystemServer簡介 Android系統中的好多功能能夠執行起來,在程式碼層面好多都是以服務的方式實現的。而幾乎所有的服務都是在SystemServer中建立的。SystemServer作為Android系統的一個核心程序,它是在zygote程序中孕育出來的。 那麼zygo