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();
}
}
ベストアンサー1
デバイスが機内モードの場合(またはおそらく利用可能なネットワークがないその他の状況の場合)、cm.getActiveNetworkInfo()
となるnull
ため、チェックを追加する必要がありますnull
。
変更(エディの解決策) 下に:
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" />
もう 1 つ小さな点として、特定の時点でネットワーク接続が絶対に必要な場合は、netInfo.isConnected()
ではなくを使用する方がよい場合がありますnetInfo.isConnectedOrConnecting
。ただし、これは個々のユースケース次第だと思います。