唐山中企動(dòng)力做網(wǎng)站搜索大全引擎入口
前兩種為應(yīng)用內(nèi)部處理,第三種為發(fā)送廣播由系統(tǒng)服務(wù)進(jìn)行處理
使用反射
這種會(huì)直接將安卓設(shè)置內(nèi)的語言列表清空,然后將選擇的語言設(shè)置為系統(tǒng)語言
該方法存在問題,在首次開機(jī)后設(shè)置會(huì)導(dǎo)致國外應(yīng)用進(jìn)不去(只對(duì)于here地圖個(gè)別版本)
/*** 設(shè)置語言,使用反射* @param mLocale CHINESE ENGLISH*/public void setLanguage(Locale mLocale) {try {Class localPicker = Class.forName("com.android.internal.app.LocalePicker");Method updateLocale = localPicker.getDeclaredMethod("updateLocale",Locale.class);updateLocale.invoke(null,mLocale);} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException| IllegalAccessException e) {e.printStackTrace();}}
更新語言列表方式
參考安卓設(shè)置方法進(jìn)行移植,該方法需要系統(tǒng)的framework的jar包支持
/*
** 獲取系統(tǒng)語言列表,并將選擇的語言加入進(jìn)去
*/
private List<LocaleStore.LocaleInfo> getUserLocaleList(Context context) {final List<LocaleStore.LocaleInfo> result = new ArrayList<>();final LocaleList localeList = LocalePicker.getLocales();for (int i = 0; i < localeList.size(); i++) {//判斷列表中是否有重復(fù)項(xiàng),如有,略過Locale locale = localeList.get(i);if (locale.getLanguage().equals("en")) {continue;}result.add(LocaleStore.getLocaleInfo(locale));}Locale mLocale = new Locale("en","EN");result.add(0,LocaleStore.getLocaleInfo(Locale.ENGLISH));return result;
}
調(diào)用
List<LocaleStore.LocaleInfo> mFeedItemList = getUserLocaleList(getApplicationContext());
int count = mFeedItemList.size();
Locale[] newList = new Locale[count];
for (int i = 0; i < count; i++) {final LocaleStore.LocaleInfo li = mFeedItemList.get(i);newList[i] = li.getLocale();
}
LocaleList ll = new LocaleList(newList);
LocaleList.setDefault(ll);
LocalePicker.updateLocales(ll);
系統(tǒng)服務(wù)進(jìn)行處理
- 參考系統(tǒng)恢復(fù)默認(rèn)設(shè)置處理
系統(tǒng)/安卓設(shè)置內(nèi)流程
流程未研究,待定
該條目參考文章:Android Settings(設(shè)置)語言的切換和添加原理流程簡析