我正在尝试从设置片段发送广播并在另一个活动中收听它。我使用ActivityA中的startActivityForResult启动了设置活动。 SettingsActivity有一个静态片段SettingsFragment:
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
Preference rateApp = findPreference("rate_this_app");
Preference abcd = findPreference("abcd");
rateApp.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
}
});
abcd.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(getActivity(), ActivityA.class);
intent.setAction("abcd");
getActivity().sendBroadcast(intent);
}
});
}
}
从abcd.setOnPreferenceClickListener发送的广播在ActivityA中注册,但由于某种原因没有收到它。是因为活动在后台,它不会接收广播吗?
答案 0 :(得分:0)
如果您的活动处于暂停状态,则您无法接收广播。
替代方案取决于您的目标。如果您的目标是更改应用中的某些设置,我会在用户进行更改后立即将其保存在SharedPreferences
中。在ActiivityA
onCreate
方法中,我会从SharedPreferences
中读取它。如果需要采取措施,BroadcastReceivers用于通知开发人员。例如,如果设置更改将更改用户屏幕上的视图,则BroadcastReceiver非常有用。您将收到通知并更新您的UI。如果用户看不到该页面,则您不需要该页面。