android - 连接wifi或移动数据时如何检查设备是否处于连接状态?
问题描述
我正在开发在应用程序启动时运行我的网络服务的 android 应用程序。我的应用程序基本上是设备的家庭应用程序。这意味着当用户重新启动设备时,我的应用程序将出现在他面前。
到目前为止,这很棒。但我注意到,在应用程序启动时,设备需要 5 到 10 秒才能连接互联网。而我的网络服务在互联网建立之前运行,因此抛出“发生错误,请稍后再试”的错误。
我想要什么:虽然我正在显示该消息,但我真的不满意,因为我确实想向用户显示一条消息。该消息应该是“设备正在连接到互联网”
但不幸的是,我无法这样做。我正在使用以下代码
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}
但它确实告诉我网络是否连接。
那么是否存在我可以显示诸如“请等待设备正在连接到互联网”之类的消息的情况
或者我怎样才能让该设备重新启动而不是唯一的应用程序。... 请帮忙
解决方案
在您的活动中注册本地(或清单声明,如果您愿意)广播接收器(此处的文档https://developer.android.com/guide/components/broadcasts),使用此意图过滤器监听连接更改IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
:然后检查设备是否与您发布的代码有互联网连接。请记住在 onResume() 方法中注册广播接收器并在 onPause() 方法中取消注册
- 从 api 24 及更高版本:
你可以使用 registerDefaultNetworkCallback https://developer.android.com/reference/android/net/ConnectivityManager.html#registerDefaultNetworkCallback(android.net.ConnectivityManager.NetworkCallback)
回调有一个名为“onAvailable”的公共方法https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onAvailable(android.net.Network)当新网络准备好时调用使用。
推荐阅读
- angular - API 轮询和超时
- java - 在控制器中接受请求时发生 json 解析错误
- jquery - 如何从进行 ajax 调用中排除页面
- php - 使用 JMS Serializer 在 symfony 4 中反序列化 xml
- c# - 更改 Windows 状态后,ScrollViewer 上的最后一项被截断
- web-services - 如何将值从 html 页面传递到简单的 java 类
- java - MongoDB,2个查询的共同部分
- firebase - 为什么 for 循环在离子 ionViewWillEnter 方法中不起作用
- cmis - 获取具有特定 Aspect 属性值的文件夹或站点中的所有文档?
- bash - Bash basename 只返回文件夹列表中的姓氏