2015-02-06 102 views
1

我试图注册一个wifi接收器,我做了如下所示的代码,问题是当我故意禁用设备中的WiFi并运行代码ToastelseBroadCast Receiver中的声明永远不会被调用。无线广播接收器从来没有叫

代码

OnClickListener mainFramListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); 
     registerReceiver(broadcastReceiver, intentFilter); 
    } 
}; 

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 
     if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) { 
      if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){ 
       MQTT_Connection_Module(); 
      } else { 
       Toast.makeText(getApplicationContext(), "No WiFi-Connection", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 
}; 

权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
+0

我相信,当discoverPeers()是的onReceive()只调用成功并且有同行近在咫尺年。因此,当您关闭无线网络时,您将无法检测到任何同伴,并且onReceive将不会被呼叫。 – 2015-03-15 20:08:23

回答

0

试试这个办法:

//put this in your activity, service, or whatever 

private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

     boolean isWifiConnected = false; 
     boolean isMobileConnected = false; 

     ConnectivityManager connMgr = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     if(networkInfo != null) 
     isWifiConnected = networkInfo.isConnected(); 

     networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(networkInfo != null) 
     isMobileConnected = networkInfo.isConnected(); 

     Log.d("network status", "wifi == " + isWifiConnected + " and mobile == " + isMobileConnected); 

     } 
    }; 

//registering the receiver from activity, service 

registerReceiver(mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

//or 

context.registerReceiver(mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); //where context it's a Context class object 


//manifest 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 



// see http://androidsnippets.com/network-connectivity-changes 
+0

我应该使用哪种意图过滤器 – user2121 2015-02-06 10:28:02