2015-04-17 57 views
0

我尝试更改android手机的语言有问题使用代码 ,但它给了我两个异常java.lang.reflect.InvocationTargetException和java.lang。空指针异常。帮助我的任何机构知道如何解决这些异常。是否有可能通过android代码更改android手机的语言

public void changeLanguageSettings(Context con, Locale language) { 
    try { 
     //Linguagem definida 
     Locale locale = language; 

     Class amnClass = Class.forName("android.app.ActivityManagerNative"); 
     Object amn = null; 
     Configuration config = null; 

     // amn = ActivityManagerNative.getDefault(); 
     Method methodGetDefault = amnClass.getMethod("getDefault"); 
     methodGetDefault.setAccessible(true); 
     amn = methodGetDefault.invoke(amnClass); 

     // config = amn.getConfiguration(); 
     Method methodGetConfiguration = amnClass 
       .getMethod("getConfiguration"); 
     methodGetConfiguration.setAccessible(true); 
     config = (Configuration) methodGetConfiguration.invoke(amn); 

     // config.userSetLocale = true; 
     Class configClass = config.getClass(); 
     Field f = configClass.getField("userSetLocale"); 
     f.setBoolean(config, true); 

     // alterando a linguagem 
     config.locale = locale; 

     // amn.updateConfiguration(config); 
     Method methodUpdateConfiguration = amnClass.getMethod(
       "updateConfiguration", Configuration.class); 
     methodUpdateConfiguration.setAccessible(true); 
     methodUpdateConfiguration.invoke(amn, config); 

    } catch (Exception e) { 
     Log.d("error-->", "" + e.getMessage().toString()); 
    } 
} 

回答

1

你还挺使它真的很难,如果你想改变用户的默认本地,你可以做这样的:

Resources res = context.getResources(); 
    // Change locale settings in the app. 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    android.content.res.Configuration conf = res.getConfiguration(); 
    conf.locale = new Locale(language); 
    res.updateConfiguration(conf, dm); 
0

这其实很简单:

Resources res = context.getResources(); 
DisplayMetrics dm = res.getDisplayMetrics(); 
android.content.res.Configuration conf = res.getConfiguration(); 
conf.locale = new Locale(lang); 
res.updateConfiguration(conf, dm); 

lang显然是一种语言代码,如'en','fr'或'es'。

相关问题