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

これにより、接続が非常に良好であるにもかかわらず、次の図のような状態メッセージが表示されてユーザーが混乱する可能性があります。 ここに画像の説明を入力

このメッセージはしばらくの間しか表示されず、すぐに「接続済み」に置き換えられますが. しかし、この国家は何を目指しているのでしょうか。関数で DetailedState を VERIFYING_POOR_LINK に設定しない場合のリスクは何ですかenter()

4

2 に答える 2

0

VERIFYING_POOR_LINK一部の Samsung デバイスは Wi-Fi の一部であり、Smart Network Switch悪条件が発生した場合でもモバイル データを Wi-Fi 経由で接続したままにすることができます。Samsung デバイスの場合、詳細な状態が から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 レイヤーで接続すると、アクセス ポイントからのビーコンがデバイスに到達し、接続を維持できますが、アプリケーションの接続が不安定になる可能性があります (パケット サイズの交換が大きいため)。

アップリンクとして Wi-Fi に切り替えるのに十分なリンクであるかどうかを判断する指標としてパケット損失率を使用して、Wi-Fi のラスト ホップの品質を監視します。

WiFi が接続されている場合、WiFi ウォッチドッグは RSSI と瞬間的なパケット損失をサンプリングし続け、AP ごとの RSSI 損失統計として記録します。瞬間的なパケット損失がしきい値を超えると、WiFi ウォッチドッグはリンク不良通知を送信して、一時的に WiFi 接続を回避します。

WiFi が回避されている間、WiFi ウォッチドッグは RSSI を監視し続け、WiFi 接続を元に戻します。RSSI が十分に高くなり、パケット損失が少なくなると、適切なリンク検出が送信され、WiFi 接続が再び利用可能になります。

BSSID ローミングが考慮されています。ユーザーが複数の AP 間を移動している場合、WiFi ウォッチドッグはそれを検出し、現在接続されている AP を監視し続けます。

測定の多くはドライバーで既に追跡されているパッシブ統計に依存しており、ポーリングは画面がオンで RSSI が特定の範囲内にあるときに行われるため、電力への影響は最小限に抑える必要があります。

于 2015-07-13T18:56:58.357 に答える