【问题标题】:Inconsistent result of WifiInfo#getBssid() behaviorWifiInfo#getBssid() 行为的结果不一致
【发布时间】:2018-09-20 13:15:06
【问题描述】:

我正在尝试定义 WiFi 连接状态的变化。但我还需要更多 - 获取 WiFi 网络的 BSSID。

我没有使用 BroadcastReceiver 方法,而是每秒轮询一次 WifiInfo#getBssid() 。大多数时候它工作正常,但是在我的手机进入睡眠时间相对较长(>~小时)后,当我的电话连接到 WiFi 时,WifiInfo#getBssid() 返回 null。

public String getBssid() {
    WifiManager wifiMgr = (WifiManager);
    getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
    String bssid = wifiInfo.getBSSID();
}

我通过 JNI 从 Qt 代码调用这个函数。

【问题讨论】:

  • 如果 Android 是什么,它是不一致的。你有没有研究过 Android 的 Doze 是如何工作的?我很确定它会禁用 WiFi(有点,不是真的,它很复杂),这可能是你的问题。这段代码是从哪里运行的?
  • @TheWanderer,我对打盹只有大概的了解。此代码位于 MainActitvity 中,它是 Qt 应用程序的包装器。
  • 任何时候想要做后台工作,都需要使用Service。
  • 嗯.. 对于 Android SDK 和官方应用程序架构来说,活动和服务状态由 Android 管理是正确的。我使用 Qt,我自己管理组件的状态。无论如何,如果我只是在应用程序处于活动状态(前台活动)时每秒调用 getBssid(),那么所有这些的原因是什么?
  • 可能是因为打瞌睡。尝试使用部分唤醒锁。

标签: android qt


【解决方案1】:

问题不在于 Android,而在于 Qt。我使用 QNetworkConfigurationManager 作为我的 NetworkMonitor 类的成员,并在检查 bssid 之前检查了QNetworkConfigurationManager#defaultConfiguration().bearerType() == QNetworkConfiguration::BearerWLAN。因此,bearerType 在设备睡眠唤醒后返回错误的值,直到我在每次唤醒时重新创建 QNetworkConfigurationManager 实例。

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 2021-04-02
    • 1970-01-01
    • 2021-03-27
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多