2016-09-30 10 views
2

내가 여기있는 이상한 문제.자바를 사용하여 adhoc 무선 랜에 연결하거나 수동으로 수행하는 것의 차이점

카메라에서 무선 애드 호크 네트워크에 연결하는 앱을 만들고 있습니다. (Wi-Fi에는 인터넷이 연결되어 있지 않습니다.)

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; 
     } 
    } 

이 코드 작업 : 장치가 무선 랜에 연결 않습니다 내가 원하는하지만 다음은

내가 자동으로 카메라 무선 랜에 안드로이드 전화를 연결 할 수 있도록, 사용하는 자바 코드

는 여기에 문제

내가 카메라로 대화에 특정 API를 사용하고 있습니다. 이 코드를 사용하여 Wi-Fi에 연결하면 API가 작동하지 않습니다. 하지만 수동으로 설정 앱을 사용하여 Wi-Fi에 연결하면 문제가 없습니다 ... 셀룰러 데이터를 사용하지 않으면 코드를 사용하여 카메라에 자동으로 연결할 수 있습니다. 셀룰러 데이터가 adhoc 무선 랜보다 우선 순위가 높은 것처럼 보이지만 자바 코드로 연결되었을 때만 나타납니다.

두 가지 방법의 차이점은 무엇입니까? 코드를 더 추가해야합니까? 정말 고마워요! 그래서

"인터넷에 연결되지 않는 네트워크에 여러 네트워크 연결이 아닌 데이터를 라우팅을 허용, 롤리팝에서 이후 OS가 좀 더 지능이되었다"

:

답변

1

나는 해결책 here 발견 연결되면이 코드를 추가했습니다.

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); 
      } 
     } 
    }