以编程方式更改系统语言 - Android

时间:2016-03-08 15:50:35

标签: android

我在本文中发现的有趣的是以编程方式更改整个系统语言。

How to change android system locale

它显示了两种方式:

1-使用Class Reflection访问API:

try {
    Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative");   
    Object am=activityManagerNative.getMethod("getDefault").invoke(activityManagerNative); 
    Object config=am.getClass().getMethod("getConfiguration").invoke(am); 
    config.getClass().getDeclaredField("locale").set(config, Locale.US); 
    config.getClass().getDeclaredField("userSetLocale").setBoolean(config, true); 

    am.getClass().getMethod("updateConfiguration",android.content.res.Configuration.class).invoke(am,config); 

}catch (Exception e) { 
    e.printStackTrace(); 
}

2-在构建路径中使用假类

package android.app;

import android.content.res.Configuration;
import android.os.RemoteException;

public interface IActivityManager {
        public abstract Configuration getConfiguration () throws RemoteException;
        public abstract void updateConfiguration (Configuration configuration) throws RemoteException;
}

package android.app;

public abstract class ActivityManagerNative implements IActivityManager {

        public static IActivityManager getDefault(){
                return null;
        }   

}

文章中解释的细节。这适用于android pre 4.2。但是我在android 4.4.2上测试了这两种方法并且没有用。

我的应用已经拥有root权限。因此root权限对我来说不是问题。

我们如何以编程方式更改系统语言?

1 个答案:

答案 0 :(得分:0)

您必须检查新API级别的新实现,并根据更改调整代码。

您可以在此处查看源代码: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ActivityManagerNative.java