web-dev-qa-db-ja.com

Kotlin:ConnectivityManagerを使用してネットワークステータスを確認すると、ネットワークが切断された場合にnullが返されます。どうして?

この機能を使用して、ネットワークのステータス(接続または切断)を確認しようとしています。

// Check Network status
private fun isNetworkAvailable(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE)
    return if (connectivityManager is ConnectivityManager) {
        val networkInfo = connectivityManager.activeNetworkInfo
        networkInfo.isConnected
    }
    else false
}

これにより、切断されたネットワークで実行した場合、Java.lang.IllegalStateException:networkInfoをnullにすることはできません-エラーが発生します。どうして?そして、どうすればこれを解決できますか?

3

最も簡単な方法の1つは、以下のようにContextクラスに拡張機能を追加することです。

val Context.isConnected: Boolean
get() {
    return (getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager)
        .activeNetworkInfo?.isConnected == true
}

これで、次のようなアクティビティで使用できます。

 if (!isConnected) {
 // connection is not available...
 }

この方法は、アクティビティ、フラグメント、またはコンテキスト内の任意の場所で使用できます。

0
Zumry Mohamed

このコードを使用してください、それは確かに役立ちます


fun checkConnectivity(context:Context):ブール値{

    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val activeNetwork: NetworkInfo? = connectivityManager.activeNetworkInfo

    if(activeNetwork?.isConnected!=null){
        return activeNetwork.isConnected
    }
    else{
        return false
    }
}
0
Rohan Choudhary