简体   繁体   English

如何让wifi状态改变只广播一次

[英]how to get wifi state change Broadcast only once

In my application, I want to get wifi state change broadcast only once.在我的应用程序中,我只想获得一次 wifi 状态更改广播。 However, when wifi changed, I received broadcast many times, what should I do?但是,当wifi改变时,我多次收到广播,我该怎么办?

public class WifiChangedReceiver extends BroadcastReceiver {
public static String TAG = "WifiChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager connMgr = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifi = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    boolean isConnected = wifi != null && wifi.isConnected();
    if (isConnected) {
        WifiManager wifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        String wifi_ssid = wifiManager.getConnectionInfo().getSSID();
        Log.d(TAG, "wifi  connected==="+wifi_ssid); 
    } else {
        Log.d(TAG, "wifi  disconnected"); 
    }
}


public class MainActivity extends Activity {

private WifiChangedReceiver mReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(mReceiver==null){
        mReceiver = new WifiChangedReceiver();
    }
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    registerReceiver(mReceiver, filter);    
}

@Override
protected void onDestroy() {
    if(mReceiver!=null){
        unregisterReceiver(mReceiver);
    }
    super.onDestroy();
}

LogCat: wifi Camus to Tutu enter image description here LogCat:wifi Camus to Tutu在此处输入图像描述

LogCat: wifi Tutu to Camus enter image description here LogCat:wifi Tutu to Camus在此处输入图片描述

First of all store a value in shared preference with value "off" and change the value of that during unregistering.so that it won't register again,so u don't get the broadcast again.首先在共享首选项中存储一个值为“off”的值,并在取消注册期间更改该值。这样它就不会再次注册,因此您不会再次收到广播。

pf=preferenceManager.getdefaultsharedpreferences(); pf=preferenceManager.getdefaultsharedpreferences();

pf.edit().getString("status") pf.edit().getString("状态")

if(pf.getString(status).equals("off")) { if(pf.getString(status).equals("off")) {

register the receiver注册接收者

} }

Then during unregistering然后在注销过程中

{ {

pf.edit().putString("status","ON") pf.edit().putString("status","ON")

unregister the receiver取消注册接收者

} }

I solved the problem by google, although the reaction is not immediately, it's useful to my project.我通过google解决了这个问题,虽然反应不是立即,但对我的项目很有用。 I posted the code, may be useful for somebody else.我发布了代码,可能对其他人有用。

public class WifiChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle b = intent.getExtras();
            NetworkInfo netInfo = (NetworkInfo) b
                    .get(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo.State state = netInfo.getState();
            ConnectivityManager connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();

            if ((state == NetworkInfo.State.CONNECTED) && (activeNetInfo != null)
                    && (activeNetInfo.getType() == netInfo.getType())) {
                Log.d(TAG, "wifi  connected"); 
            }
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM