检测 3G 或 Wifi 网络恢复
Posted
技术标签:
【中文标题】检测 3G 或 Wifi 网络恢复【英文标题】:Detect 3G or Wifi Network restoration 【发布时间】:2011-05-29 01:29:29 【问题描述】:是否可以实现 PhoneStateListener(或任何其他机制)来检测 3G 或 Wifi 网络连接何时恢复?
我在 API 的摘要中看到 LISTEN_DATA_CONNECTION_STATE 和 LISTEN_DATA_ACTIVITY 都说(蜂窝)。是不是只有3G?
谢谢
【问题讨论】:
【参考方案1】:更好的方法是使用 android.net.ConnectivityManager 类。注册接收器并监听广播。
private class ConnectionMonitor extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
return;
boolean noConnectivity = intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
NetworkInfo aNetworkInfo = (NetworkInfo) intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (!noConnectivity)
if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
|| (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI))
// Handle connected case
else
if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
|| (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI))
// Handle disconnected case
private synchronized void startMonitoringConnection()
IntentFilter aFilter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mConnectionReceiver, aFilter);
private synchronized void stopMonitoringConnection()
unregisterReceiver(mConnectionReceiver);
在哪里
mConnectionReceiver = new ConnectionMonitor();
【讨论】:
你确定吗?根本收不到广播还是什么? 接收广播,但noConnectivity一直返回false。 有趣。请给我更多信息。哪款手机、操作系统版本、WiFi 或 GPRS?你怎么造成没有连接的情况。谢谢。 我正在测试 WIFI 和 GPRS,我刚刚打开和关闭了飞行模式。我的操作系统版本是 2.2,设备是三星 Galaxy S1。我解决它的方法是:connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = 连通性.getActiveNetworkInfo();并检查 activeNetInfo 是否不为空。 这是获取当前状态(初始值)的正确方法。但是要监视您需要注册广播接收的更改,不时执行定期检查是没有意义的。仍然困惑为什么它不适合你。证明这适用于 7 种不同的 Android 手机,从 Android 2.1 开始。从未观察到的问题。以上是关于检测 3G 或 Wifi 网络恢复的主要内容,如果未能解决你的问题,请参考以下文章
WIFI或3G网络变化时的BroadcastReceiver
Android 判断网络是不是可用以及网络类型(WIFI,2G,3G,4G)
有没有办法检测我正在使用啥样的连接? WiFi、3G 还是以太网?
如何在手机中检查 WIFI 和 3G(数据计划)中的网络连接启用或禁用?
FusedLocationProviderClient 无法通过 3G 或 4G 网络获取 GPS 位置,除非先连接到 WIFI 网络