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.