我正在android应用程序上工作,我需要检查互联网连接,如果可用,我在onStart方法内击中api,否则无互联网弹出窗口打开。但有时(不是每次)当我的应用程序来到前台后,按下home键,然后重新打开应用程序ConnectivityManager。activeNetwork对象为空。为什么会发生这种情况,或者我可以采用什么方法来逃避这个问题。我可以使用处理程序延迟api请求吗?
以下是我检查网络连接的方法。当我在onStart中调用这个方法时对象有时为空,因此打开no-internetpopup。
fun isConnected(): Boolean {
val cm = instance.getSystemService(Context.CONNECTIVITY_SERVICE) as
ConnectivityManager
if (cm != null) {
if (Build.VERSION.SDK_INT < 23) {
val ni = cm.activeNetworkInfo
if (ni != null) {
return (ni.isConnected && (ni.type == ConnectivityManager.TYPE_WIFI
|| ni.type == ConnectivityManager.TYPE_MOBILE
|| ni.type == ConnectivityManager.TYPE_BLUETOOTH))
}
} else {
Log.d("no_internet", "1" + cm.activeNetwork)
val n = cm.activeNetwork
if (n != null) {
val nc = cm.getNetworkCapabilities(n)
if (nc != null) {
return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|| nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|| nc.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH))
}
}
}
}
return false
}
注意:此问题发生在某些设备的o/s android 11,特别是三星SM-M315F
这只发生在你使用onStart?也许你应该检查你的舱单是否有<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>