近日的项目中,需要编写设置系统语言的方法,之后,在同事和网上的信息的帮助下,成功实现了这一功能。
try {
Class<?> amnClass = Class.forName("android.app.ActivityManagerNative");
ActivityManager activityManager = (ActivityManager)amnClass.getMethod("getDefault").invoke(amnClass,null);
Configuration config = (Configuration)activityManager.getClass().getMethod("getConfiguration").invoke(activityManager, null);
config.getClass().getDeclaredField("locale").set(config, Locale.ENGLISH);
config.getClass().getDeclaredField("userSetLocale").setBoolean(config, true);
activityManager.getClass().getMethod("updateConfiguration", Configuration.class).invoke(activityManager, config);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
android源代码下的设置语言操作,参见:/frameworks/base/core/java/com/android/internal/app/LocalePicker.java