【问题标题】:Detect 3G or Wifi Network restoration检测 3G 或 Wifi 网络恢复
【发布时间】:2011-05-29 01:29:29
【问题描述】:

是否可以实现 PhoneStateListener(或任何其他机制)来检测 3G 或 Wifi 网络连接何时恢复?

我在 API 的摘要中看到 LISTEN_DATA_CONNECTION_STATE 和 LISTEN_DATA_ACTIVITY 都说(蜂窝)。是不是只有3G?

谢谢

【问题讨论】:

    标签: android networking 3g android-wifi


    【解决方案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 开始。从未观察到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多