내 xamarin 네이티브 응용 프로그램을 통해 장치 언어를 변경하고 싶습니다. 안드로이드 스튜디오에서 다음 코드를 사용하여 쉽게이 작업을 수행 할 수 있습니다.xamarin에 해당하는 "Android.App.ActivityManagerNative"클래스는 무엇입니까?
public static void changeLanguage()
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
@SuppressWarnings("rawtypes")
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);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// getConfiguration moved from ActivityManagerNative to ActivityManagerProxy
amnClass = Class.forName(amn.getClass().getName());
}
// config = amn.getConfiguration();
Method methodGetConfiguration = amnClass.getMethod("getConfiguration");
methodGetConfiguration.setAccessible(true);
config = (Configuration) methodGetConfiguration.invoke(amn);
// config.userSetLocale = true;
@SuppressWarnings("rawtypes")
Class configClass = config.getClass();
Field f = configClass.getField("userSetLocale");
f.setBoolean(config, true);
Locale locale = new Locale("zh", "CN");
// set the locale to the new value
config.locale = locale;
// amn.updateConfiguration(config);
Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);
methodUpdateConfiguration.setAccessible(true);
methodUpdateConfiguration.invoke(amn, config);
}
저는 Xamarin을 통해 동일한 작업을 수행하려고합니다. 그러나 xamarin에서는 아래 오류가 발생합니다.
Caused by: java.lang.ClassNotFoundException: Didn't find class "Android.App.ActivityManagerNative"
같은 목적을 달성하기 위해 내가 사용할 수있는 수업을 알려주십시오.
내 코드를 C#으로 변환하려고 시도했는데 내 mono.Android 버전이 4.0.30319, VS 2017, jdk 1.8.0_144, 컴파일 대상 : Android 8.0, 테스트 된 장치 : Android에서 에뮬레이터로이 문제를 재현하지 못했습니다. 7.0. 하지만 같은 문제가 있었 네이티브 자바 안드로이드와 다른 사람을 발견, 그는이 문제를 우회 빌드 경로 가짜 클래스를 만들었지 만,이 문제를 재현 할 수 없기 때문에,이 솔루션이 도움이되는지 잘 모르겠습니다. –
안녕하세요, 문제를 재현 할 수 없다면 Xamarin으로 작성된 코드에서 장치 언어를 변경할 수 있다는 의미입니까? – Sarfaraz
필자는 그 코드를 테스트하지 않았고 코드의 마지막 줄에서 문제를 만났으며 권한이 없다고 제안하고 매니페스트에 사용 권한을 추가했지만 조사한 후에이 메서드를 사용하면 응용 프로그램은 시스템 응용 프로그램으로 설치해야합니다, 나는 그것을 설치하지 않았지만 코드는 내 편이 낫습니다. –