建站新体验,济宁网站建设 帮站,长沙网站关键词seo,在线建网站前两种为应用内部处理#xff0c;第三种为发送广播由系统服务进行处理
使用反射
这种会直接将安卓设置内的语言列表清空#xff0c;然后将选择的语言设置为系统语言 该方法存在问题#xff0c;在首次开机后设置会导致国外应用进不去(只对于here地图个别版本) /*** 设置语言…前两种为应用内部处理第三种为发送广播由系统服务进行处理
使用反射
这种会直接将安卓设置内的语言列表清空然后将选择的语言设置为系统语言 该方法存在问题在首次开机后设置会导致国外应用进不去(只对于here地图个别版本) /*** 设置语言使用反射* 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();}}更新语言列表方式
参考安卓设置方法进行移植该方法需要系统的framework的jar包支持
/*
** 获取系统语言列表并将选择的语言加入进去
*/
private ListLocaleStore.LocaleInfo getUserLocaleList(Context context) {final ListLocaleStore.LocaleInfo result new ArrayList();final LocaleList localeList LocalePicker.getLocales();for (int i 0; i localeList.size(); i) {//判断列表中是否有重复项如有略过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;
}调用
ListLocaleStore.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);系统服务进行处理 参考系统恢复默认设置处理
系统/安卓设置内流程
流程未研究待定 该条目参考文章Android Settings(设置)语言的切换和添加原理流程简析