2017-08-24 20 views
1

OkHttpが携帯電話ネットワーク上でリクエストを強制的に実行する方法はありますか?AndroidフォースOkHttpモバイルネットワーク経由でのリクエスト

私のアプリには、携帯電話ネットワーク(3G、LTE、4G、ではなく、Wifi)で送信する必要のあるリクエストがあります。私はRetrofitとOkHttpを他のすべてのネットワークリクエストに使用しているので、これらのリクエストにも使用したいと思います。 ConnectivityManger.registerDefaultNetworkCallback()のように見えますが、これはAPI 21+のみをサポートしています。私はAPI 19+のためのソリューションを希望します。

答えて

1

と仮定すると、APIの21+、

Network network; // filled in from ConnectivityManager.NetworkCallback 
OkHttpClient client = new OkHttpClient.Builder() 
     .socketFactory(network.getSocketFactory()) 
     .build(); 

あなたはネットワークが離れて行くと戻って来るときOkHttpClientを再構築する必要がありますが、それはなんとかです。この方法では、デフォルト以外のネットワークを明示的に使用することができます(一部のデバイスでは、接続してWiFiにデフォルト設定してもデータ接続を維持できます)。

API19では、ConnectivityManager.getActiveNetworkInfo()にチェックを入れ、そのタイプがWiFiの場合は操作を拒否し、android.net.conn.CONNECTIVITY_CHANGEに登録されているBroadcastReceiverから再度チェックします。

0

21よりも低いAPIの解決策が必要なので、ConnectivityManagerで試すことができます。

setNetworkPreference(type)ここで、typeConnectivityManager.TYPE_WIFIまたはConnectivityManager.TYPE_MOBILEのいずれかです。あなたの場合はTYPE_MOBILEです。

このメソッドはAPI 21以降で廃止されました。現在のAndroidバージョンを確認する必要があります。

この呼び出しには、android.Manifest.permission.CHANGE_NETWORK_STATE権限が必要です。

関連する問題