2013-03-05 9 views
6

Z powodzeniem utworzyłem programowo przenośny punkt dostępu na moim urządzeniu z określonym identyfikatorem SSID. Teraz chcę się z nim połączyć z innego urządzenia! Używam tego kodu:Programowe połączenie z urządzeniem z systemem Android w przenośnym punkcie dostępowym

WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = "\"" + "TinyBox" + "\""; 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiManager.addNetwork(conf); 

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

Ale nic się nie dzieje. Gdzie jest błąd? Dzięki

Odpowiedz

8

Tak więc, znalazłem problem! Identyfikator SSID był błędny z powodu cytatów "". Jeśli więc stworzenie otwartego przenośny hotspot z następującego kodu (wziąłem go gdzieś w internecie):

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    if(wifiManager.isWifiEnabled()) 
    { 
     wifiManager.setWifiEnabled(false);   
    }  
    Method[] wmMethods = wifiManager.getClass().getDeclaredMethods(); //Get all declared methods in WifiManager class  
    boolean methodFound=false; 
    for(Method method: wmMethods){ 
     if(method.getName().equals("setWifiApEnabled")){ 
      methodFound=true; 
      WifiConfiguration netConfig = new WifiConfiguration(); 
      netConfig.SSID = "\""+"TinyBox"+"\""; 
      netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 

      try { 
       boolean apstatus=(Boolean) method.invoke(wifiManager, netConfig,true);   
       for (Method isWifiApEnabledmethod: wmMethods) 
       { 
        if(isWifiApEnabledmethod.getName().equals("isWifiApEnabled")){ 
         while(!(Boolean)isWifiApEnabledmethod.invoke(wifiManager)){ 
         }; 
         for(Method method1: wmMethods){ 
          if(method1.getName().equals("getWifiApState")){ 
           int apstate; 
           apstate=(Integer)method1.invoke(wifiManager); 
          } 
         } 
        } 
       } 
       if(apstatus) 
       { 
        System.out.println("SUCCESSdddd"); 

       }else 
       { 
        System.out.println("FAILED"); 

       } 

      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } catch (InvocationTargetException e) { 
       e.printStackTrace(); 
      } 
     }  
    } 

Musisz połączyć się z nim za pomocą:

WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = "\"\"" + "TinyBox" + "\"\""; 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiManager.addNetwork(conf); 

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
    for(WifiConfiguration i : list) { 
     if(i.SSID != null && i.SSID.equals("\"\"" + "TinyBox" + "\"\"")) { 
      try { 
       wifiManager.disconnect(); 
       wifiManager.enableNetwork(i.networkId, true); 
       System.out.print("i.networkId " + i.networkId + "\n"); 
       wifiManager.reconnect();    
       break; 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 

     }   
    } 
+0

to doda cytuje dwa razy jak '" "Tinybox" "', czy jest to właściwa metoda –

+0

zawsze łamie na "for (WifiConfiguration i: list)" .. jaki może być problem? (nowy) –

+0

@phcaze czy możliwe jest podanie hasła? – Roster

Powiązane problemy