我希望我的应用在用户更改语言环境时随时都能识别。因此,在我的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
内设置断点表明它永远不会被击中。
答案 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