BroadcastReceiver没有收到意图Intent.ACTION_LOCALE_CHANGED

时间:2015-05-26 02:02:16

标签: android android-intent broadcastreceiver

我希望我的应用在用户更改语言环境时随时都能识别。因此,在我的Application课程中,我创建了一个receiver来收听系统意图ACTION_LOCALE_CHANGED

public final class MyApp extends Application {

    private BroadcastReceiver myReceiver = new BroadcastReceiver() {

    @Override public void onReceive(Context context, Intent intent) {
        String locale = Locale.getDefault().getCountry();
        Toast.makeText(context, "LOCALE CHANGED to " + locale, Toast.LENGTH_LONG).show();
    }
    };

    @Override public void onCreate() {
       IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);

       LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, filter);
    }
}

当我按下主页并转到设置应用程序以更改我的区域设置时,不会显示Toast。在onReceive内设置断点表明它永远不会被击中。

2 个答案:

答案 0 :(得分:12)

为什么要在Application类中使用BroadcastReceiver。我的建议是为BroadcastRecevier设一个单独的类。

public class LocaleChangedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {


        if (intent.getAction (). compareTo (Intent.ACTION_LOCALE_CHANGED) == 0)
        {

            Log.v("LocaleChangedRecevier", "received ACTION_LOCALE_CHANGED");
        }

    }
}

并在Manifest文件中注册您的Brodcast接收器。

        <receiver
            android:name=".LocaleChangedReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.LOCALE_CHANGED" />
            </intent-filter>
        </receiver>

答案 1 :(得分:4)

INSERT INTO NZTABLE SELECT * FROM TEMP 不是本地广播,因此当您使用Intent.ACTION_LOCALE_CHANGED注册时,它无法正常工作。 LocalBroadcastManager用于在您的应用内使用的广播。

LocalBroadcastManager