2017-08-24 45 views
1

強制OkHttp通過蜂窩網絡請求的方法是什麼?通過移動網絡的Android Force 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,某些設備也可以保持數據連接)。

在API 19上,您可以檢查ConnectivityManager.getActiveNetworkInfo(),如果類型爲WiFi,則拒絕操作,然後再從登記爲android.net.conn.CONNECTIVITY_CHANGEBroadcastReceiver進行檢查。

0

由於您需要比21更低的API的解決方案,因此您可以使用ConnectivityManager來嘗試。

您有此方法setNetworkPreference(type)其中typeConnectivityManager.TYPE_WIFIConnectivityManager.TYPE_MOBILE。你的情況是TYPE_MOBILE

此方法在API 21+中已棄用,您應該檢查當前的Android版本。

請注意,此調用需要android.Manifest.permission.CHANGE_NETWORK_STATE權限。