亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現系統語言切換功能

2020-01-02 07:01:59
字體:
來源:轉載
供稿:網友

簡單介紹下這個需求的緣由,這段時間因公司業務需要,其中有一項“設置系統語言”功能,就是在使用APP的過程中,動態的去切換整個Android機器的語言,具體參照手機設置頁面有語言切換功能。起初想來是很簡單的事情嘛,不就是個簡單的資源國際化嘛,strings.xml資源文件一整還不給OK?真正動起手來就真不是這么一回事了,國際化是沒問題,但是怎樣能更改所有頁面的文字資源呢,這是一個問題。下面介紹下網上找的幾個方案。

一、API欺騙

燒制到手機中的android.jar包含了Android所需的各種類與方法;而供開發者使用的android.jar只是其中的一部分。API欺騙是指在應用中去模擬未公開的類和方法讓應用編譯通過并生成APK,然而在應用實際運行中調用的卻仍是燒制到手機中真實的android.jar。

二、使用Java反射機制

IActivityManager與ActivityManagerNative都是非公開類,使用Java反射去調用其中的方法。
但是這個弊端是顯而易見的,上述兩種方法都是去更改系統的語言的類型,功能和你去設置頁面去設置語言類型的效果一樣。發現對當前系統設置了新的Locale后,不單自己的應用語系改變了,系統所有的應用語系都改變了,這正是我們所需要的。

核心代碼如下:

/** * TODO<更新系統語言> *  * @author Xiho * @versionCode 1 <每次修改提交前+1> */@SuppressWarnings("unchecked")public class LanguageUtils {  public static void updateLanguage(Locale locale) {    try {      Object objIActMag, objActMagNative;      Class clzIActMag = Class.forName("android.app.IActivityManager");      Class clzActMagNative = Class          .forName("android.app.ActivityManagerNative");      //amn = ActivityManagerNative.getDefault();       Method mtdActMagNative$getDefault = clzActMagNative          .getDeclaredMethod("getDefault");      objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);       // objIActMag = amn.getConfiguration();       Method mtdIActMag$getConfiguration = clzIActMag          .getDeclaredMethod("getConfiguration");      Configuration config = (Configuration) mtdIActMag$getConfiguration          .invoke(objIActMag);      // set the locale to the new value       config.locale = locale;      //持久化  config.userSetLocale = true;       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 };      // objIActMag.updateConfiguration(config);      Method mtdIActMag$updateConfiguration = clzIActMag          .getDeclaredMethod("updateConfiguration", clzParams);      mtdIActMag$updateConfiguration.invoke(objIActMag, config);      BackupManager.dataChanged("com.android.providers.settings");    } catch (Exception e) {      e.printStackTrace();    }  }}

這樣我們利用JAVA的反射機制,調用那些隱藏的方法就可以實現了。

需要注意的是調用此方法:

// objIActMag.updateConfiguration(config);mtdIActMag$updateConfiguration.invoke(objIActMag, config);

需要加上權限:

android.permission.CHANGE_CONFIGURATION

并且此處會重新調用onCreate方法,我就在這個地方處被坑了一把。(如果調用此方法的時候做了一些邏輯,就注意下)。

最后聲明:

既然是更改系統的配置當然你的簽名也應該是系統簽名和sharedUserId。不然會類似以下的錯誤!

error:

java.lang.SecurityException: Permission Denial: updateConfiguration() from pid=31594, uid=10099 requires android.permission.CHANGE_CONFIGURATION

各位都注意下吧~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久久久久| 国产精品视频永久免费播放| 992tv成人免费影院| 国产一区二区丝袜高跟鞋图片| 在线精品视频视频中文字幕| 国产精品久久久久99| 亚洲国产精品字幕| 97视频人免费观看| 国产原创欧美精品| 欧美性xxxx18| 色午夜这里只有精品| 国语自产精品视频在线看抢先版图片| 国产成人免费av电影| 欧美有码在线视频| 亚洲伊人成综合成人网| 久久精品最新地址| 亚洲理论片在线观看| 亚洲一区二区久久久| 欧美国产日韩免费| 欧美裸体xxxx极品少妇| 色婷婷综合久久久久| 成人av在线亚洲| 一区二区成人av| 色哟哟亚洲精品一区二区| 日韩av网站导航| 国产亚洲欧洲在线| 日韩av色在线| 亚洲图片制服诱惑| 欧美疯狂xxxx大交乱88av| 国产精品白丝av嫩草影院| 一级做a爰片久久毛片美女图片| 26uuu久久噜噜噜噜| 最近2019好看的中文字幕免费| 92看片淫黄大片欧美看国产片| 97超级碰碰人国产在线观看| 精品国产一区二区三区在线观看| 久久久久久久影院| 国产欧美一区二区三区久久人妖| 欧美激情xxxx| 精品国产999| 97在线观看免费高清| 精品欧美一区二区三区| 国产91在线播放九色快色| 国产精品自拍偷拍视频| 国产免费观看久久黄| 亚洲福利视频在线| 欧美性感美女h网站在线观看免费| 亚洲图片欧洲图片av| 91在线高清免费观看| 国内精品久久久久久久| 成人午夜小视频| 懂色av影视一区二区三区| 欧美激情在线狂野欧美精品| 国产一区二区三区毛片| 日韩有码在线观看| 97久久伊人激情网| 国产精品精品视频一区二区三区| 欧美成人一区在线| 九九热在线精品视频| 大量国产精品视频| 欧美最近摘花xxxx摘花| 日韩精品极品毛片系列视频| 91产国在线观看动作片喷水| 在线免费观看羞羞视频一区二区| 中文字幕精品久久久久| 久久久久久久久久久人体| 日韩在线中文字幕| 最新国产成人av网站网址麻豆| 亚洲伦理中文字幕| 2023亚洲男人天堂| 日韩中文字幕在线| 狠狠色香婷婷久久亚洲精品| 热久久这里只有| 久久夜精品va视频免费观看| 亚洲图片欧美日产| 国产a∨精品一区二区三区不卡| 国产精品丝袜久久久久久不卡| 国产精品成久久久久三级| 精品福利樱桃av导航| 欧美做爰性生交视频| 中文字幕欧美日韩| 91精品国产综合久久久久久蜜臀| 欧美性色xo影院| 91av免费观看91av精品在线| 色先锋资源久久综合5566| 国产精品wwwwww| 日韩国产高清污视频在线观看| 日韩免费在线播放| 色综合久久88色综合天天看泰| 亚洲无av在线中文字幕| 欧美精品免费播放| 日韩成人中文电影| 欧美乱人伦中文字幕在线| 欧美日韩一区二区在线播放| 亚洲第一网站免费视频| xxxxxxxxx欧美| 国产亚洲在线播放| 欧美成人午夜免费视在线看片| 曰本色欧美视频在线| 亚洲精品视频网上网址在线观看| 一本一本久久a久久精品牛牛影视| 欧美有码在线视频| 国产亚洲综合久久| 亚洲精品久久久一区二区三区| 成人av在线网址| 亚洲天堂男人的天堂| 亚洲视频视频在线| 欧美成人在线免费| 日韩av电影在线网| 98精品国产高清在线xxxx天堂| 国产欧美日韩精品在线观看| 91亚洲精品久久久久久久久久久久| 国产精品久久久久国产a级| 成人亚洲欧美一区二区三区| 欧美成人精品在线播放| 亚洲精品久久久久| 亚洲国产精品999| 亚洲xxx视频| 亚洲激情视频网站| 久久中文精品视频| 日韩激情在线视频| 国产精品吊钟奶在线| 成人黄色网免费| 日本欧美一级片| 亚洲电影中文字幕| 一区二区福利视频| 国产精品999999| 日产精品99久久久久久| 中文字幕国产精品久久| 黑人与娇小精品av专区| 亚洲第一免费网站| 日韩精品在线免费| 国产午夜精品一区二区三区| 日韩黄在线观看| 亚洲国产美女久久久久| www.欧美精品一二三区| 久久好看免费视频| 国产精品视频一区二区高潮| 亚洲欧美精品在线| 欧美精品做受xxx性少妇| 日韩欧美亚洲成人| 啪一啪鲁一鲁2019在线视频| 国产精品ⅴa在线观看h| 国产视频久久久久久久| 日韩色av导航| 国产丝袜一区二区三区免费视频| 国产精品永久免费视频| 国产精品白丝av嫩草影院| 97超视频免费观看| 在线视频日韩精品| 国产精品一区电影| 欧美成人免费大片| 成人乱色短篇合集| 国产精品亚洲视频在线观看| 精品视频在线导航| 国内精久久久久久久久久人| 奇米成人av国产一区二区三区| 国产欧美 在线欧美| 久久这里只有精品视频首页| 日韩极品精品视频免费观看| 久久影视电视剧免费网站清宫辞电视| 久久男人的天堂| 亚洲香蕉伊综合在人在线视看| 国产999在线|