2015-02-06 3 views
1

Я пытаюсь зарегистрировать приемник Wi-Fi, и я сделал это, как показано в коде, представленном ниже, проблема в том, что я намеренно отключил Wi-Fi в устройстве и запустил код Toast в else утверждение в BroadCast Receiver никогда не вызывается.WiFi Broadcast 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

Я считаю, что OnReceive() вызывается только тогда, когда discoverPeers() является успешный И есть сверстники nearb у. Таким образом, когда вы отключите Wi-Fi, вы не сможете обнаружить ни одного сверстника, и onReceive не будет вызван. –

ответ

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