【发布时间】: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(),那么所有这些的原因是什么?
-
可能是因为打瞌睡。尝试使用部分唤醒锁。