8

在 Juice 中,枚举DetailedState 添加了一个名为

/** Link has poor connectivity. */
        VERIFYING_POOR_LINK

但是这个国家代表什么?

搜索了整个项目后,我发现了这个:

WifiStateMachine.java 中的 VerifyingLinkState 子类

class VerifyingLinkState extends State {
    @Override
    public void enter() {
        if (DBG) log(getName() + "\n");
        EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
        setNetworkDetailedState(DetailedState.VERIFYING_POOR_LINK);
        mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.VERIFYING_POOR_LINK);
        sendNetworkStateChangeBroadcast(mLastBssid);
    }
    @Override
    public boolean processMessage(Message message) {
        switch (message.what) {
            case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
                //stay here
                break;
            case WifiWatchdogStateMachine.GOOD_LINK_DETECTED:
                try {
                    mNwService.enableIpv6(mInterfaceName);
                } catch (RemoteException re) {
                    loge("Failed to enable IPv6: " + re);
                } catch (IllegalStateException e) {
                    loge("Failed to enable IPv6: " + e);
                }

                setNetworkDetailedState(DetailedState.CONNECTED);
                mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.CONNECTED);
                sendNetworkStateChangeBroadcast(mLastBssid);
                transitionTo(mConnectedState);
                break;
            default:
                return NOT_HANDLED;
        }
        return HANDLED;
    }
}

当它在验证链接状态时,在enter()函数中,它将DetailedState设置为

DetailedState.VERIFYING_POOR_LINK

这将导致用户在连接非常好的情况下获得如下图所示的状态消息而感到困惑。 在此处输入图像描述

虽然这条消息只停留了一会儿,然后很快就被“已连接”取代。但是这个国家的目标是什么?如果我没有在enter()函数中将DetailedState 设置为VERIFYING_POOR_LINK,会有什么风险。

4

2 回答 2

0

虽然我不能给出肯定(或保证)的答案..

我会说这意味着连接很弱(小于 30%(?) 信号)

编辑:

Android 提供了避免/忽略低连接性接入点的能力——我假设这种状态表明不应使用连接。

我认为忽略/忽视这种状态没有任何风险。

编辑2:

根据最近的评论,我从 android 文档中摘录了以下内容:

公共静态最终 NetworkInfo.DetailedState VERIFYING_POOR_LINK

API 级别 16 中添加的链接连接性较差。

它可以在NetworkInfo.DetailedState中找到

于 2015-04-05T09:38:37.913 回答
0

VERIFYING_POOR_LINK对于某些三星设备是Smart Network SwitchWi-Fi 的一部分,如果出现恶劣条件,它可以允许移动数据通过 Wi-Fi 保持连接。对于三星设备,您会看到详细状态从CONNECTEDVERIFYING_POOR_LINK

大部分逻辑可以在: http ://androidxref.com/4.3_r2.1/xref/frameworks/base/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java

WifiWatchdogStateMachine 监控与 WiFi 网络的连接。当 WiFi 在 L2 层连接时,来自接入点的信标到达设备并保持连接,但应用程序连接可能不稳定(由于更大的数据包大小交换)。

我们现在使用丢包率作为指标来监控 WiFi 上最后一跳的质量,以决定链路是否足够好以切换到 Wi-Fi 作为上行链路。

当 WiFi 连接时,WiFi 看门狗不断采样 RSSI 和即时丢包,并将其记录为 per-AP loss-to-rssi 统计信息。当瞬间丢包率高于某个阈值时,WiFi看门狗会发出链路不良通知,暂时避免WiFi连接。

在避免 WiFi 的同时,WiFi 看门狗会继续监视 RSSI 以恢复 WiFi 连接。一旦 RSSI 高到足以实现较低的数据包丢失,就会发送良好的链路检测,以便 WiFi 连接再次可用。

BSSID 漫游已被考虑在内。当用户在多个 AP 之间移动时,WiFi 看门狗会检测到这一点并继续监视当前连接的 AP。

功率影响应该是最小的,因为大部分测量依赖于已经在驱动程序处跟踪的被动统计数据,并且轮询是在屏幕打开并且 RSSI 在一定范围内时完成的。

于 2015-07-13T18:56:58.357 回答