私の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"
私は同じクラスを達成するためにXamarinでどのクラスを使用できますか教えてください。
あなたのコードをC#に翻訳しようとしましたが、私のmono.Androidバージョンは4.0.30319、VS 2017、jdk 1.8.0_144、コンパイル対象:Android 8.0、テスト済みデバイス:Android搭載エミュレータ7.0。しかし、私は同じ問題を抱えていたネイティブのJavaのアンドロイドを持つ他の人を見つけました。この問題を回避するために、ビルドパスに偽のクラスを作成しましたが、この問題を再現できませんでした。 –
こんにちは、問題を再現できない場合は、Xamarinで書かれたコードからデバイス言語を変更できたことを意味しますか? – Sarfaraz
私はこれまでのところテストしていませんでしたが、コードの最後の行で問題が発生していました。許可がないことを示しました。マニフェストで権限を追加しましたが、調査したところ、アプリはシステムアプリとしてインストールする必要がありますが、私はそれをインストールしませんでしたが、コードは私の側では問題ありません。 –