2016-09-30 56 views
2

我在這裏有一個奇怪的問題。使用java連接到adhoc wifi或手動執行它的區別

我正在製作一個應用程序,可以從相機連接到無線adhoc網絡。 (所以沒有互聯網連接的無線網絡)。

這裏是Java代碼我使用,能夠自動將Android手機連接到相機的WiFi:

WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = "\"" + networkSSID + "\""; 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 

    wifiManager.addNetwork(conf); 
    LocalBroadcastManager.getInstance(context).registerReceiver(mWifiScanReceiver, new IntentFilter(TAG_WIFI_CONNECTED)); 

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
    for(WifiConfiguration i : list) { 
     if(i.SSID != null && i.SSID.contains(networkSSID)) { 
      if (old_networkId != i.networkId && wifiManager.getConnectionInfo() != null) 
       old_networkId = wifiManager.getConnectionInfo().getNetworkId(); 
      wifiManager.disconnect(); 
      sicilia_ssid = networkSSID; 

      wifiManager.enableNetwork(i.networkId, true); 
      wifiManager.reconnect(); 
      break; 
     } 
    } 

此代碼的工作:該設備不連接到WiFi網絡我想,但:

這裏的問題是

我使用一個特定的API與相機對話。 如果我使用此代碼連接到無線網絡,API將不起作用。但如果我手動連接到無線(與設置應用程序),沒有問題... 如果我禁用蜂窩數據,我可以使用代碼自動連接到相機。 因此,它看起來像蜂窩數據優先於特定的無線網絡,但只有當連接是在Java代碼...

那麼兩種方式之間的區別是什麼? 我是否需要添加更多代碼? 非常感謝!

回答

1

我找到了解決辦法here

「從棒棒糖起OS變得有點更加智能化,讓多個網絡連接,而不是將數據路由到不具有Internet連接的網絡」

所以我一旦建立連接,添加此代碼:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     Network current_network = null; 
     for (Network n : cm.getAllNetworks()) 
     { 
      if (cm.getNetworkInfo(n).getTypeName().equals("WIFI")) { 
       current_network = n; 
       break; 
      } 
     } 

     if (current_network != null) 
     { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
       cm.bindProcessToNetwork(current_network); 
      else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       ConnectivityManager.setProcessDefaultNetwork(current_network); 
      } 
     } 
    } 
相關問題