2015-07-23 6 views
0

Я хочу что-то сделать, когда соединение Wi-Fi установлено. У меня есть BroadcastReceiver, который работает префектно, получая NETWORK_STATE_CHANGED_ACTION и SCAN_RESULTS_AVAILABLE_ACTION, но не SUPPLICANT_CONNECTION_CHANGE_ACTION. Это сложнее проверить: для этого я выключаю/выключаю маршрутизатор.изменение связи просителя не срабатывает

protected void onCreate(Bundle savedInstanceState) { 

    receiverWifi = new WifiReceiver(); 
      IntentFilter intentFilter = new IntentFilter(); 
      intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); 
      intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 
      intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
      registerReceiver(receiverWifi, intentFilter); 
    //... 
    } 

    class WifiReceiver extends BroadcastReceiver { 
      public void onReceive(Context c, Intent intent) { 
       final String action = intent.getAction(); 

       Log.d("mhp","*BroadcastReceiver: " + action")} 

И Manifiest.xml

<application 
     a.. 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="android.net.wifi.SCAN_RESULTS" /> 
       <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
       <action android:name="android.net.wifi.STATE_CHANGE" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

И AndroidManifest.xml:

<application 
     a.. 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="android.net.wifi.SCAN_RESULTS" /> 
       <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
       <action android:name="android.net.wifi.STATE_CHANGE" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

ответ

2

О подключении к Wi-Fi сети, даже если вы не получите SUPPLICANT_CONNECTION_CHANGE_ACTION, вы обязательно получите NETWORK_STATE_CHANGED_ACTION, и вы можете играть с этим действием для всех ваших нужд.

В радиовещательного приемника, выполните следующие действия:

String action = intent.getAction(); 
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) 
{ 
    NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    if ((netInfo.getDetailedState()==(NetworkInfo.DetailedState.CONNECTED))) 
    { 
     // your wifi is connected, do what you want to do 
    } 
} 
+1

Спасибо @ unrealsoul007. Он не решает тайну просителя, но он удовлетворяет мои потребности! – Sorrentum

+0

@ Sorrentum Рад помочь !! Счастливое кодирование .. !! :) – unrealsoul007

+0

, хотя это может удовлетворить его потребности, из моих тестов мы никогда не получаем ничего, кроме ОТКЛЮЧЕННЫХ, АССОЦИАЦИЙ, СВЯЗАННЫХ И ЗАВЕРШЕННЫХ. Любая попытка отладки сбоев соединения, таких как переходы в/из AUTHENTICATING, GROUP_HANDSHAKE, FOUR_WAY_HANDSHAKE, никогда не будет возникать на Nexus 5 ... WifiInfo.getDetailedStateOf (supplicantState) будет OBTAINING_IPADDR 24/7 на том же телефоне, хотя есть IP и даже интернет ... – leRobot

Смежные вопросы