2017-02-19 32 views
2

私のアプリでは、自分のWiFiネットワークを持つデバイスに接続しています。 インターネットに接続していなくても、このネットワークに接続したい場合は、アンドロイド6以上で数秒後に私に尋ねられます。 そのメッセージを承認した後で、自分のデバイスに接続できます。 プログラムでネットワークに接続しようとしましたが、ユーザーが設定に行って毎回手動で接続するよう強制しません。私は、デバイスのネットワークに接続するには、次のコードを使用:WiFi接続を使用するようにアプリを強制しようとしてもインターネット接続なしでWiFiを使用する

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

    } 

限りが、 Cellularデータがアクティブなので、デバイスは接続されません。 Cellularデータを無効にすると、正常に動作します。 セルラーデータを無効にするようにユーザーに指示せずに、プログラマチックに行う方法があるかどうかを知る必要があります。

おかげ

+0

こんにちは@YYjoあなたはこの質問の回答がありますか? @KenRatanachaiS。 –

+0

残念ながら違います。限り、私はそれがちょうどアンドロイドでうまく動作しないと言うことができます。 – YYJo

答えて

1

限りセルラーデータがアクティブであるように、デバイスが接続されない つくれをしているが。携帯電話のデータを無効にすると、それは正常に動作します

私は同様の問題に直面していました。デフォルトの解決策は私にとっては役に立たなかったので、クラスの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; 
    } 
}); 
関連する問題