【问题标题】:how to get wifi state change Broadcast only once如何让wifi状态改变广播一次
【发布时间】:2015-11-30 13:36:57
【问题描述】:

在我的应用程序中,我只想获得一次 wifi 状态更改广播。但是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 Tutu to Camus enter image description here

【问题讨论】:

  • 第一次回调后尝试注销。
  • @Haresh Chhelana 我同时得到了状态,不是一个一个。我需要监控状态变化,直到应用退出

标签: android android-wifi


【解决方案1】:

首先在共享首选项中存储一个值为“off”的值,并在注销期间更改该值。这样它就不会再次注册,所以你不会再次收到广播。

pf=preferenceManager.getdefaultsharedpreferences();

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

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

注册接收者

}

然后在注销时

{

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

注销接收者

}

【讨论】:

  • 我的问题是同时获得连接状态两次或三次,我已经粘贴了日志打印屏幕。
【解决方案2】:

我通过google解决了这个问题,虽然反应不是很快,但对我的项目很有用。我发布了代码,可能对其他人有用。

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"); 
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多