gpt4 book ai didi

java - 如何检查Android上的互联网访问? InetAddress 永远不会超时

转载 作者:IT老高 更新时间:2023-10-28 12:48:37 26 4
gpt4 key购买 nike

我有一个 AsyncTask 应该检查对主机名的网络访问。但是 doInBackground() 永远不会超时。有人知道吗?

public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> {

private Main main;

public HostAvailabilityTask(Main main) {
this.main = main;
}

protected Boolean doInBackground(String... params) {
Main.Log("doInBackground() isHostAvailable():"+params[0]);

try {
return InetAddress.getByName(params[0]).isReachable(30);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}

protected void onPostExecute(Boolean... result) {
Main.Log("onPostExecute()");

if(result[0] == false) {
main.setContentView(R.layout.splash);
return;
}

main.continueAfterHostCheck();
}
}

最佳答案

如果设备处于飞行模式(或可能在其他没有可用网络的情况下),cm.getActiveNetworkInfo() 将为 null,因此您需要添加一个 null 检查。

以下修改 (Eddie's solution):

public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}

AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

另外一点,如果您在给定的时间点绝对需要网络连接,那么使用 netInfo.isConnected() 而不是 netInfo.isConnectedOrConnecting。我想这取决于个人用例。

关于java - 如何检查Android上的互联网访问? InetAddress 永远不会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1560788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com