在Juice中,枚举DetailedState添加了一个名为的新状态
/** Link has poor connectivity. */
VERIFYING_POOR_LINK
Run Code Online (Sandbox Code Playgroud)
但这个州的立场是什么?
搜索完整个项目后,我发现了这个:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在验证链接状态时,在enter()函数中,它将DetailedState设置为
DetailedState.VERIFYING_POOR_LINK
Run Code Online (Sandbox Code Playgroud)
当连接真的很好时,这将导致用户对如下图所示的状态消息感到困惑.

虽然此消息只停留一段时间,然后迅速替换为"已连接".但这个州的目标是什么?如果我没有在enter()功能中将DetailedState设置为VERIFYING_POOR_LINK,会有什么风险.
VERIFYING_POOR_LINK对于某些三星设备来说,它是 Wi-Fi 的一部分Smart Network Switch,如果条件恶劣,可以允许移动数据通过 Wi-Fi 保持连接。对于三星设备,此时您会看到详细状态从CONNECTED到VERIFYING_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 和即时数据包丢失进行采样,并将其记录为每个 AP 的 RSSI 丢失统计数据。当瞬时丢包率高于阈值时,WiFi 看门狗会发送链路不良通知,暂时避免 WiFi 连接。
当 WiFi 被避开时,WiFi 看门狗会继续监视 RSSI 以恢复 WiFi 连接。一旦 RSSI 足够高以实现较低的数据包丢失,就会发送良好的链路检测,以便 WiFi 连接再次可用。
已考虑 BSSID 漫游。当用户在多个 AP 之间移动时,WiFi 看门狗会检测到并持续监视当前连接的 AP。
功率影响应该是最小的,因为大部分测量依赖于驱动程序上已经跟踪的被动统计数据,并且轮询是在屏幕打开且 RSSI 处于特定范围内时完成的。
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |