1.因为此功能涉及到系统权限.
2.需要获取系统权限
3.利用反射机制来设置系统语言,此种方式需要重启系统生效.
一.因为此功能涉及到系统权限.
需要配置
android:sharedUserId="android.uid.system"
也需要获取系统权限
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
二.反射机制的代码
public static void setLanguage(Context mContext,Locale locale) { try { Object objIActMag; 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; Class clzConfig = Class .forName("android.content.res.Configuration"); java.lang.reflect.Field userSetLocale = clzConfig .getField("userSetLocale"); userSetLocale.set(config, true); Class[] clzParams = { Configuration.class }; Method mtdIActMag$updateConfiguration = clzIActMag .getDeclaredMethod("updateConfiguration", clzParams); mtdIActMag$updateConfiguration.invoke(objIActMag, config); BackupManager.dataChanged("com.android.providers.settings"); } catch (Exception e) { e.printStackTrace(); } //系统重启 startReboot(mContext); }
//重启系统逻辑 public static void startReboot(Context mContext){ Intent intent = new Intent(Intent.ACTION_REBOOT); intent.putExtra("nowait", 1); intent.putExtra("interval", 1); intent.putExtra("window", 0); mContext.sendBroadcast(intent); }
三> 完毕.