java - Android如何检查互联网连接
问题描述
我希望能够获得用户互联网连接。我努力了
boolean connected = false;
try {
ConnectivityManager cm = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nInfo = cm.getActiveNetworkInfo();
connected = nInfo != null && nInfo.isAvailable() && nInfo.isConnected();
return connected;
} catch (Exception e) {
Log.e("Connectivity Exception", e.getMessage());
}
return connected;
但这只会获取移动数据和 wifi 连接状态,如果用户的数据计划已过期或什至没有任何数据计划,我将无法知道。我想在进行服务器调用之前知道互联网状态,而不是创建服务器并在运行时间错误中运行。
请帮助我检查了堆栈溢出,但我一直得到相同的答案。
解决方案
使用此功能检查互联网连接:
Boolean hasInternet(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Network activeNetwork = connectivityManager.getActiveNetwork();
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
if (capabilities != null) {
if (capabilities.hasCapability(NetworkCapabilities.TRANSPORT_WIFI)) return true;
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) return true;
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) return true;
else return false;
}
} else {
try {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
} catch (NullPointerException e){
return false;
}
}
return false;
}
推荐阅读
- html - 无法使用 CSS 中的动画滚动第二个段落
- android - 用于 AndroidTest 的 Kodein 覆盖绑定
- c - 在 _generic 宏中避免“警告:从不同大小的整数转换为指针 [-Wint-to-pointer-cast]”
- python - 在 Python 中使用 Matplotlib 更新 PDF 元数据的 CreationDate 和 ModificationDate 字段的问题
- python - 无法访问谷歌云计算引擎外部 IP 来访问烧瓶应用
- macos - 如何从文件夹中打开mac中的终端
- swift - 接收上一屏 Swiftui 发送的数据
- sql - 计算一个值相同但另一个值不同的情况的数量
- python - Scrapy:如何抓取由两部分组成的产品价格?
- javascript - 验证时在 span 元素中显示错误消息的问题