如何将SharedPreferences与BroadcastReceiver一起使用

时间:2013-08-25 19:30:16

标签: android android-broadcast

我有一个扩展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);`

1 个答案:

答案 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
    }
}

如果有多个活动,则可以更清楚地获得其中一个活动,并分别在onResumeonPause中创建和删除接收者,并将信息放在共享首选项中阅读onResume。或者只是在onResume中查询wifi状态,然后设置接收器。

如果有多个应用程序,那么您不仅需要更改某些首选项(公开可见),还需要告知其他应用程序的活动已进行了更改。这个应用程序会更容易。拥有它自己的广播接收器。