2015-03-18 2 views
0

Я новичок в разработке Android и пытался подключиться к сети Wi-Fi с помощью Android SDK. Код для отключения работает нормально, но повторное соединение не выполняется. Вот код, который у меня естьНе удается подключиться к сети Wi-Fi

try { 
     WifiConfiguration conf = new WifiConfiguration(); 
     conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain SSID in quotes 
     conf.wepKeys[0] = password; //WEP password is in hex, we do not need to surround it with quotes. 
     conf.wepTxKeyIndex = 0; 
     conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
     conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 

     WifiManager wifiManager = (WifiManager)ba.applicationContext.getSystemService(Context.WIFI_SERVICE); 
     wifiManager.addNetwork(conf); 

     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for(WifiConfiguration i : list) { 
      if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { 
       wifiManager.disconnect(); 
       wifiManager.enableNetwork(i.networkId, true); 
       wifiManager.reconnect();    

       break; 
      }   
     } 

     //WiFi Connection success, return true 
     return true; 
    } catch (Exception ex) { 

     throw ex; 
    } 

Я обертываю этот код в файле jar, который я использую в другом приложении. Когда я называю этот метод и попытаться подключиться к сети WEP с использованием SSID и пароля, я продолжаю получать следующее сообщение об ошибке:

android.system.ErrNoException: recvfrom failed: ETIMEDOUT (Connection timed out).

ошибка действительно говорит, что есть где-то тайм-аут соединения, но у меня нет смог понять это, чтобы исправить мой код. Любые указатели и изменения, которые я могу ввести в код, чтобы сделать эту работу?

Paritosh

+0

Непонятно, в какой момент вы получите сообщение об ошибке. И почему вы отключитесь, если хотите подключиться? – greenapps

+0

Я в основном перечисляю все доступные сети, используя представление списка, и пользователь может выбрать один из списка и ввести пароль для подключения к новой сети. Следовательно, отключение от существующей сети и подключение к новой сети. – user869375

+0

'Мне непонятно, в какой момент вы получаете ошибку. ' – greenapps

ответ

0

Информация о подключении может прийти асинхронно, так что вы не можете знать в коде вы упомянули кастрированный баран соединение было успешным или нет. Вы можете попытаться реализовать BroadcastReceiver, который получает информацию о соединении wifi.

public class ConnectivityChangedReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInf = conMgr.getAllNetworkInfo(); 

     for (NetworkInfo inf : netInf) { 
      if (inf.getTypeName().contains("wifi")) { 
       if (inf.isConnected()) { 
        Toast.makeText(context, "Connected to Wifi", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(context, "Could not connect to wifi", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    } 
} 

Тогда в вашем андроиде манифеста вы должны объявить его как неоспоримый приемник, например:

<receiver android:name=".YourPackageName.ConnectivityChangedReceiver" > 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
     </intent-filter> 
</receiver> 

Я просто пытаюсь это сам, но я думаю, что это правильно обходной путь для этой проблемы, поскольку Wifimanager.reconnect() на самом деле не подключил меня к настроенной сети. Удачи.

+0

Я попробовал ваше предложение, но это только улучшает код, он все равно не отвечает, почему я не могу подключиться к новой сети (если только он не хранится в списке соединений Wi-Fi Android). Попробуйте забыть о существующем подключении и подключиться из приложения, он не будет подключен. – user869375

+0

У меня есть аналогичное приложение для подключения к Wi-Fi, но единственная разная строка между моим кодом и вашим заключается в следующем: conf.wepKeys [0] = пароль; Я также добавил пароль в скобки. В остальном это тот же код. Кроме того, вы можете попробовать выполнить итерацию через настроенные сети, чтобы узнать, существует ли сеть, которую вы пытаетесь добавить, и если да, обновите ее через wifiManager.updateNetork (config). –

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