private void updateLanguage(Locale locale) {
try {
IActivityManager iActMag = ActivityManagerNative.getDefault();
Configuration config = iActMag.getConfiguration();
config.locale = locale;
iActMag.updateConfiguration(config);
} catch (Exception e) {
e.printStackTrace();
}
}
或者通过反射方法调用
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;
// need permission android.permission.CHANGE_CONFIGURATION
Class[] clzParams = { Configuration.class };
Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
"updateConfiguration", clzParams);
mtdIActMag$updateConfiguration.invoke(objIActMag, config);
} catch (Exception e) {
e.printStackTrace();
}
}
但是有个前提,需要配置permission android.permission.CHANGE_CONFIGURATION,并且这个app需要具有系统权限,比如把app放到system/priv-app目录。
本文介绍如何使用两种方法更新Android应用的语言设置:一种是直接调用IActivityManager的方法,另一种是通过反射机制实现。这两种方法都需要配置特定权限,并且应用程序需要具备系统权限。
3100

被折叠的 条评论
为什么被折叠?



