強制OkHttp通過蜂窩網絡請求的方法是什麼?通過移動網絡的Android Force OkHttp請求
我的應用程序有一定的請求,必須通過蜂窩網絡(3G,LTE,4G,不是Wifi)發送。我正在使用Retrofit和OkHttp處理所有其他網絡請求,所以我也希望將它用於這些請求。它看起來像ConnectivityManger.registerDefaultNetworkCallback()
可以幫助,但只支持API 21 +。我想要一個API 19+的解決方案。
強制OkHttp通過蜂窩網絡請求的方法是什麼?通過移動網絡的Android Force OkHttp請求
我的應用程序有一定的請求,必須通過蜂窩網絡(3G,LTE,4G,不是Wifi)發送。我正在使用Retrofit和OkHttp處理所有其他網絡請求,所以我也希望將它用於這些請求。它看起來像ConnectivityManger.registerDefaultNetworkCallback()
可以幫助,但只支持API 21 +。我想要一個API 19+的解決方案。
假設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_CHANGE的BroadcastReceiver
進行檢查。
由於您需要比21更低的API的解決方案,因此您可以使用ConnectivityManager
來嘗試。
您有此方法setNetworkPreference(type)
其中type
是ConnectivityManager.TYPE_WIFI
或ConnectivityManager.TYPE_MOBILE
。你的情況是TYPE_MOBILE
。
此方法在API 21+中已棄用,您應該檢查當前的Android版本。
請注意,此調用需要android.Manifest.permission.CHANGE_NETWORK_STATE
權限。