我有一个扩展BroadcastReceiver的类,它显示wifi连接是连接还是丢失。我正在尝试使用SharedPreferences将此信息传递给另一个活动,但它无法正常工作。是否有一种在BroadcastReceiver类中设置SharedPreferences的特殊方法?请参阅下面的代码:
public class NetworkChangeReceiver extends BroadcastReceiver {
protected SharedPreferences mPrefs;
public static final String PREF_WIFI = "wifi";
@Override
public void onReceive(final Context context, final Intent intent) {
SharedPreferences mPrefs =
PreferenceManager.getDefaultSharedPreferences(
context.getApplicationContext());
String status = NetworkUtil.getConnectivityStatusString(context);
mPrefs.edit().putString(PREF_WIFI, status).commit();
}
}
我甚至试图像下面那样设置mPref,但仍然没有运气
mPrefs = context.getSharedPreferences(PREF_WIFI, Context.MODE_PRIVATE);`
答案 0 :(得分:0)
如果Activity是与Receiver相同的应用程序的一部分,那么在Activity内部子类化可能更容易:
class MyActivity extends Activity {
private BroadcastReceiver wifiBR = null;
// All the usual things
// And add in
@Override
public void onCreate() {
// EVerything else
wifiBR = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
String status = NetworkUtil.getConnectivityStatusString(context);
wifiChanged(status);
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_THE_ONE_YOU_WANT);
filter.addAction(Intent.ACTION_THE_OTHER_ONE_YOU_WANT);
filter.addAction(Intent.ACTION_AND_SO_ON);
this.registerReceiver(wifiBR, filter);
}
// And add in
@Override
public void onDestroy() {
if (wifiBR != null) this.unregisterReceiver(wifiBR);
}
private void wifiChanged(String status) {
// Does something based on status
}
}
如果有多个活动,则可以更清楚地获得其中一个活动,并分别在onResume
和onPause
中创建和删除接收者,并将信息放在共享首选项中阅读onResume
。或者只是在onResume
中查询wifi状态,然后设置接收器。
如果有多个应用程序,那么您不仅需要更改某些首选项(公开可见),还需要告知其他应用程序的活动已进行了更改。这个应用程序会更容易。拥有它自己的广播接收器。