- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为了收到网络连接和断开连接的通知,然后知道我的应用程序是否可以连接到互联网,我注册了一个 ConnectionManager.CONNECTIVITY_ACTION
接收器。目前,我检查手机是否有有效的网络连接,如下所示:
if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {
// no connection!
} else {
NetworkInfo activeNetInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (activeNetInfo != null && activeNetInfo.isConnectedOrConnecting()) {
// active connection!
} else {
// no connection!
}
}
但是,我认为我做错了,因为我的应用有时会误报手机的连接状态。阅读 EXTRA_NETWORK_INFO
的文档,它似乎表明如果为这个 extra 返回的值为空,则没有连接:“......如果连接管理器正在尝试连接(或已经连接)到另一个网络,新网络的 NetworkInfo 也作为额外传递”(http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION)。
然而,在我的应用错误报告连接的情况下,就在接收到 CONNECTIVITY_ACTION
广播之前,getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo()
返回一个 NetworkInfo
对象,其 isConnectedOrConnecting()
检查返回 true。因此电话似乎已连接,但通过 CONNECTIVITY_BROADCAST
返回的 NetworkInfo
为空。
我在我的 CONNECTIVITY_ACTION
接收器代码中做错了什么?我不应该检查 EXTRA_NETWORK_INFO)
的值吗?我可以简单地依赖 EXTRA_NO_CONNECTIVITY
吗?
感谢任何帮助!
最佳答案
您没有做错任何事,但来自 isConnectedOrConnecting 的唯一可靠值是 false。
即使该方法返回 true,您也不能保证一定能够连接到网络。
当 Android 报告您实际上有一个 Activity 连接时,您需要实现某种重试机制以防连接似乎不可用。
例如,在连接到公司 WIFI 网络时可能会出现这种情况,其中所有请求最终都会重定向到公司登录页面。 Android 告诉你你有一个活跃的网络,但你的查询显然会失败。
但即使有直接的网络连接,如果没有某种重试机制来应对出现问题,依赖它返回 true 也绝不是一个好主意。
另一方面,当该方法返回 false 时,您可以保证没有网络连接。
关于android - 无法理解 CONNECTIVITY_ACTION 附加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424435/
这是我的广播接收器。我已经添加了所需的所有详细信息,但仍然无法正常工作 import android.content.BroadcastReceiver; import android.conte
我注册了一个广播来获取ConnectivityManager.CONNECTIVITY_ACTION,代码是: registerReceiver(mNetwrokBroadcastReceiver,
Intent intent = new Intent().setAction(ConnectivityManager.CONNECTIVITY_ACTION); sendBroadcast(inten
在Android N中,官网提到“Apps targeting Android N do not receive CONNECTIVITY_ACTION broadcasts”。并且还提到 JobSc
我正在注册接收器以捕获 ConnectivityManager.CONNECTIVITY_ACTION 代码,即我没有在应用程序 list 中注册它。一切正常,但我注意到我在注册接收器后立即自动收到广
为了收到网络连接和断开连接的通知,然后知道我的应用程序是否可以连接到互联网,我注册了一个 ConnectionManager.CONNECTIVITY_ACTION 接收器。目前,我检查手机是否有有效
在Android N中,官网上提到“针对Android N的应用程序不接收CONNECTIVITY_ACTION广播”。并且还提到可以使用 JobScheduler 作为替代方案。但是 JobSche
在我的应用程序中需要检查互联网连接的变化。因此,我们注册接收器“android.net.ConnectivityManager.CONNECTIVITY_ACTION”,并在 onReceive()
在我的应用程序中,我有一个 BroadcastReceiver通过 作为组件启动标签,过滤android.net.conn.CONNECTIVITY_CHANGE Intent 。 我的目标只是知道
我需要获取断开设备连接的网络。 现在我使用: NetworkInfo ni =intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_I
我正在尝试接收来自 CONNECTIVITY_ACTION 的 BroadcastMessages: // register BroadcastReceiver on network stat
我是一名优秀的程序员,十分优秀!