Android 通过移动网络强制 OkHttp 请求

Dav*_*ers 4 networking android retrofit okhttp retrofit2

是否有办法强制 OkHttp 通过蜂窝网络发出请求?

我的应用程序有某些请求必须通过蜂窝网络(3G、LTE、4G,而不是 Wifi)发送。我将 Retrofit 和 OkHttp 用于所有其他网络请求,因此我也想将它用于这些请求。看起来ConnectivityManger.registerDefaultNetworkCallback()可以提供帮助,但仅支持 API 21+。我想要一个适用于 API 19+ 的解决方案。

eph*_*ent 5

假设 API 21+,

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

OkHttpClient当网络消失并恢复时,您必须重建,但这是可行的。您可以通过这种方式明确使用非默认网络(某些设备即使连接到并默认为 WiFi 也可以保持数据连接)。

在 API 19 上,ConnectivityManager.getActiveNetworkInfo()如果类型是 WiFi,您可以检查并拒绝操作,然后从BroadcastReceiver注册的android.net.conn.CONNECTIVITY_CHANGE再次检查。