2017-02-19 2 views
2

내 앱에서 Wi-Fi 네트워크가있는 기기에 연결하고 있습니다. 인터넷 연결이 없는데도이 네트워크에 연결하려면 몇 초 후 안드로이드 6 이상에서 시스템에 묻습니다. 해당 메시지를 승인 한 후에 만 ​​내 장치에 연결할 수 있습니다. 프로그래밍 방식으로 네트워크에 연결을 시도했지만 사용자가 자신의 설정으로 이동하여 매번 수동으로 연결하지 않도록했습니다. 나는 장치를 네트워크에 연결하려면 다음 코드를 사용 : WiFi 연결을 사용하도록 응용 프로그램을 강제로 시도도인터넷 연결없이 Wi-Fi 사용하기

private void connectToWiFi(WifiManager wifiManager, String wifiName) { 

    WifiConfiguration configuration = new WifiConfiguration(); 
    configuration.SSID = "\"" + wifiName + "\""; 
    configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wifiManager.addNetwork(configuration); 
    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
    for (WifiConfiguration i : list) { 
     if (i.SSID != null && i.SSID.equals("\"" + wifiName + "\"")) { 
      wifiManager.disconnect(); 
      wifiManager.enableNetwork(i.networkId, true); 
      wifiManager.reconnect(); 
      break; 
     } 
    } 
} 

및 셀룰러 데이터 내가 사용하고 있지 :

NetworkRequest.Builder builder; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     builder = new NetworkRequest.Builder(); 
     builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 

     connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { 
      @Override 
      public void onAvailable(Network network) { 
       String ssid = wifiManager.getConnectionInfo().getSSID(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        connectivityManager.bindProcessToNetwork(null); 
        if (ssid.equals("\"" + Prefs.getWifiName(PUFMainActivity.this) + "\"")) { 
         connectivityManager.bindProcessToNetwork(network); 
         connectivityManager.unregisterNetworkCallback(this); 
        } 
       } 
      } 
     }); 

    } 

만큼 비록 셀룰러 데이터가 활성화되어 있으므로 장치가 연결되지 않습니다. 셀룰러 데이터를 사용하지 않으면 잘 작동합니다. 사용자가 셀룰러 데이터를 사용하지 않도록 설정하지 않고 프로그래밍 방식으로 원하는 것을 수행 할 수있는 방법이 있는지 알아야합니다.

감사

+0

안녕하세요 @YYjo이 질문에 대한 대답이 있습니까? –

+0

@KenRatanachaiS. 불행히도. 내가 말할 수있는 한, 안드로이드에서는 제대로 작동하지 않는다. – YYJo

답변

1

한 셀룰러 데이터 장치하지 apear가 접속되도록 수행 활성화되어 있지만. 셀룰러 데이터를 사용 중지하면 올바르게 작동합니다.

나는 비슷한 문제에 직면했다. 기본 솔루션은 나를 위해 작동하지 않았으므로 클래스의 bindSocket 메서드를 사용했으며 명백하게 잘 작동합니다. 이 솔루션은 문제에 적용되지만, 여기에 몇 가지 코드인지 모르겠어요 :

ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
Network[] networks = connectivityManager.getAllNetworks(); 
for(Network network : networks){ 
    NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network); 

    if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){ 
     wifiNetwork = network; // Grabbing the Network object for later usage 
    } 
} 

소켓 후 :

if(android.os.Build.VERSION.SDK_INT >= 22) { 
    wifiNetwork.bindSocket(socket); 
} 

UPDATE : 당신은 잡아하는 NetworkCallback을 사용할 수 있습니다 Network 개체도 마찬가지입니다.

NetworkRequest.Builder builder; 
builder = new NetworkRequest.Builder(); 
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 
ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { 
    @Override 
    public void onAvailable(Network network) { 
     wifiNetwork = network; 
    } 
}); 
관련 문제