1

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


    }

}

我什至尝试像下面那样设置 mPrefs 但仍然没有运气

mPrefs = context.getSharedPreferences(PREF_WIFI, Context.MODE_PRIVATE);`
4

1 回答 1

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。或者简单地查询wifi状态onResume,然后设置接收器。

如果有多个应用程序,那么您不仅需要更改一些偏好(这些偏好是公开可见的),还需要告诉其他应用程序的活动已经进行了更改。该应用程序会更容易。拥有自己的广播接收器。

于 2013-08-25T19:57:19.773 回答