如何在 Xamarin 中为区域设置创建 BroadcastReceiver

本文关键字:区域 设置 创建 BroadcastReceiver Xamarin | 更新日期: 2023-09-27 17:56:03

我正在尝试创建一个 BroadcastReceiver 来监听 Locale 更改,但我总是有 java ClassNotFoundException。

这是我的区域设置广播接收器:

namespace AppDemia.Droid.Receivers
{
    [BroadcastReceiver(Enabled = true)]
    [IntentFilter(new[] { Intent.ActionLocaleChanged })]
    public class LocaleChangeReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Mensagens.LanguageSystem = Locale.Default.Language; // Esse método pega a string simples (exemplo: "pt" ou "en"
            //Mensagens.languageSystem = Locale.Default.ToString();  // Esse aqui pega a string completa (exemplo: "pt_BR" ou "en_US")
            Mensagens.CultureSystem = System.Globalization.CultureInfo.CurrentUICulture.ToString(); // Aqui pegamos a string completa mas sem ser padrão android (exemplo: "pt-BR" ou "en-US", note o hifen)
            CultureInfo cultureSystem = new CultureInfo(System.Globalization.CultureInfo.CurrentUICulture.ToString());
            Mensagens.DateFormatSystem = cultureSystem.DateTimeFormat.ShortDatePattern;
        }
    }
}

这就是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="4" android:versionName="1.1.1" android:installLocation="auto" package="com.prosperi.appdemia">
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="22" />
    <application android:label="Appdemia" android:theme="@style/Appdemia" android:icon="@drawable/LogoAppdemia">
        <!-- Other things -->
        <receiver android:name="com.prosperi.appdemia.receivers.LocaleChangeReceiver">
            <intent-filter>
                <action android:name="android.intent.action.LOCALE_CHANGED"></action>    
            </intent-filter>
        </receiver>
    </application>
    <!--other things -->
</manifest>

我总是在设备设置中更改区域设置,打开我的应用程序,我有以下异常:无法实例化接收器 com.prosperi.appdemia.receivers.LocaleChangeReceiver: java.lang.ClassNotFoundException: 找不到类 "com.prosperi.appdemia.receivers.LocaleChangeReceiver"

谁能帮我?

如何在 Xamarin 中为区域设置创建 BroadcastReceiver

您无需手动将接收器添加到 AndroidManifest.xml。一旦您将 [BroadcastReceiver] 属性添加到类中,它就会自动完成。