Issue
I need to route specific requests throw wifi, even wifi "Connected, no internet" and "Mobile Data" is turned On.
Below example works fine with HttpURLConnection
, but not works with OkHttp3 (3.8.1) which is primary network library for app:
Code below works as expected with OkHttp version: 3.4.2
But broken since OkHttp version: 3.5.0
OkHttpClient.Builder builder = new OkHttpClient.Builder();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final Network[] networks = connectivityManager.getAllNetworks();
for (final Network network : networks) {
final NetworkInfo netInfo = connectivityManager.getNetworkInfo(network);
if (netInfo.getType() == ConnectivityManager.TYPE_WIFI && netInfo.getState() == NetworkInfo.State.CONNECTED) {
// just for example HttpURLConnection works as expected and route traffic throw wifi
connection = (HttpURLConnection) network.openConnection(url);
// not works since >=3.5.0, route traffic in same way
builder.socketFactory(network.getSocketFactory());
}
}
}
OkHttpClient client = builder.build();
final Response response = client.newCall(initialRequest).execute();
client.newCall not works as expected as I understand, or I simple missing something.
Solution
Finally, I found.
So if you want to get the old behaviour (like in 3.4.2 version) back you can take java.net.ProxySelector.getDefault() and wrap it with one that also tries NO_PROXY.
In my case, described above, i need to manually disable proxy before add socketFactory:
builder.proxy(Proxy.NO_PROXY);
builder.socketFactory(network.getSocketFactory());
Answered By - Sever
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.