2016-03-08 3 views
0

Что я нашел в этой статье, было интересно о программном изменении системного языка.Программный язык с программным изменением - Android

How to change android system locale

Это показывает 2 способа:

1- Использование 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

@ cricket_007 OMG я использовал автокоррекцию google chrome – MBH

+0

Я имею в виду, это «работает», если вы имели в виду «разумным способом» :) –

ответ