重置Android的线路选择,优先选择ipv4(基于okhttp)
OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.dns(new EngDNS())
class EngDNS implements Dns {
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
if (TextUtils.isEmpty(hostname)) {
return Dns.SYSTEM.lookup(hostname);
} else {
try {
List<InetAddress> inetAddressList = new ArrayList<>();
//获取所有IP地址
InetAddress[] inetAddresses = InetAddress.getAllByName(hostname);
//遍历这里面所有的地址,哪些式IPV4的
for (InetAddress inetAddress : inetAddresses) {
if (inetAddress instanceof Inet4Address) {
inetAddressList.add(0, inetAddress);
} else {
inetAddressList.add(inetAddress);
}
}
return inetAddressList;
} catch (NullPointerException ex) {
return Dns.SYSTEM.lookup(hostname);
}
}
}
}