Androidでインターネットアクセスを確認するにはどうすればいいですか? InetAddress がタイムアウトしない 質問する

Androidでインターネットアクセスを確認するにはどうすればいいですか? InetAddress がタイムアウトしない 質問する

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。ただし、これは個々のユースケース次第だと思います。

おすすめ記事