2016-12-12 20 views
0

は、私は私のAndroidアプリで次の操作を行いたい:ソケットを開くのは、3G/4Gが無効になっている場合のみ機能しますか?

  • 私は、Wi-Fiネットワーク(ソフトAP)を放出し、接続オブジェクトを持っているので、それ
  • は、ローカルデバイスに接続して、私のアプリが通信することができますWi-Fiの
  • を放出しているネットワーク192.168.0.1に私は、このデバイス

      socket = new Socket(); 
          socket.setSoTimeout(10000); 
          socket.connect(new InetSocketAddress("192.168.0.1", 80), 5000); 
    
と通信するためのソケットを開きたいです

このコードは、ネクサス6(アンドロイド7)を除いて、私のテスト機器のほとんどに働くI持って次のような場合、それは無線LANに接続されていると3Gに接続

  • 電話をworkkingいない

    ケース/ 4G

- >ソケットが開けません!それは無線LANに接続され

  • 電話を仕事と3G/4F

に接続されていない

ケース - >ソケットが正常に開きます!

すべての場合に機能するようにプログラムで行うことはできますか?

+0

エラーまたは例外は、あなたが何を取得しているされているを発見しましたか? – hagrawal

+0

ソケットタイムアウト例外 – Alex

答えて

1

は、私は最終的に解決

final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkRequest.Builder req = new NetworkRequest.Builder(); 
req.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 
cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() { 
@Override 
public void onAvailable(Network network) { 
     cm.unregisterNetworkCallback(this); 
     network.bindSocket(socket); 
     socket.setSoTimeout(SOCKET_TIMEOUT); 
     socket.connect(new InetSocketAddress(ip, port), CONNECTION_TIMEOUT); 
    } 
} 
}); 
関連する問題