【发布时间】:2016-07-07 07:14:39
【问题描述】:
我有一个BroadcastReceiver 来监听语言环境的变化。这是我的问题:
我导航到Activity,然后想通过设置应用程序更改区域设置(语言设置)。一旦进行了更改,BroadcastReceiver 就会监听 onReceive()。然后我导航回应用程序,当我这样做时,我想将用户带到另一个 Activity。
此外,区域设置修改对应于配置更改,这意味着 Activity 将被销毁并再次创建。 https://developer.android.com/guide/topics/resources/runtime-changes.html
这是广播接收器:
public class LocaleReceiver extends BroadcastReceiver {
public LocaleReceiver() {}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
if(Intent.ACTION_LOCALE_CHANGED.equals(intent.getAction())){
MainActivity.isLocaleChanged = true;
}
}
}
这里是使用BroadcastReceiver设置的静态变量的Activity。
public class MainActivity extends AppCompatActivity {
public static boolean isLocaleChanged = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isLocaleChanged){
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
isLocaleChanged = false;
}
}
}
而且我确实能够导航到不同的活动!
但是,我想以不使用静态变量的方式执行此操作(因为它们是邪恶的 :()。有没有其他方法可以做到这一点。
如果没有SharedPreferences 参与,我也会特别高兴。
【问题讨论】:
-
我有一些问题:1. 当
MainActivity.isLocaleChanged = true;完成时,您的主要活动是否在前台打开(用户可见)? 2. 更改区域设置时,您只想将用户重定向到SecondActivity?? -
1.不,它(和整个应用程序)在后台时完成。当 onReceive() 执行时,我会在设置应用程序中。 2. 是的。
-
那么你只有一个选项
SharedPreference,正如 Gabe Sechan 在下面的回答中所说的那样......!!
标签: android broadcastreceiver locale