检测 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 网络

如何在 iOS7 中以编程方式找到连接 3G 网络或 Wifi 的 iPhone 设备