2015-02-06 12 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