26

例如,如何每 3 秒从 wifi 获取扫描结果,无需mWifimanager.startScan();

谷歌说:

startScan() This method was deprecated in API level P. The ability for apps to trigger scan requests will be removed in a future release.

请注意,我使用此 API 级别 List<ScanResult> results = mWifiManager.getScanResults();而不调用startScan,列表包含 wifi AP,但它使更新非常缓慢

更新至 2019 年 1 月 12 日:https ://issuetracker.google.com/issues/112688545

4

7 回答 7

15

Google 现在已经记录了 Android P 中 startScan() 函数的限制:

“我们正在进一步限制应用程序可以请求的扫描数量,以提高网络性能和延长电池寿命。

WifiManager.startScan() 的使用仅限于: - 每个前台应用程序限制为每 2 分钟扫描 4 次。- 合并的所有后台应用程序限制为每 30 分钟一次扫描。”

来源: https ://issuetracker.google.com/issues/79906367

2018 年 8 月 8 日编辑:此处还添加了信息: https ://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-throttling

于 2018-08-05T20:39:19.367 回答
8

我认为在 API 级别 P 中,他们计划将 startScan() 移动到不同的类 (WifiScanner) 以及一些关键差异。

请参阅:https ://android.googlesource.com/platform/frameworks/base/+/android-p-preview-1/wifi/java/android/net/wifi/WifiScanner.java

如果有其他解决方案,我也很想听听。

现在,我可能只使用 startScan() 直到官方文档发布。

于 2018-03-08T18:50:41.473 回答
8

startScan() 在 P 上实际上有很多错误,因为我提出了Google 问题 79906367

我也不认为 WifiScanner 是替代品,因为它被标记为 SystemApi,这意味着应用程序无法访问......

希望我们很快就会听到,因为 RTT 仍然意味着您需要使用ScanResult is80211mcResponder扫描支持 802.11mc的 AP,在 AP 上执行 RTT Ranging 之前检查它。

于 2018-06-07T14:56:49.050 回答
2

StartScan() 方法在 Android P 中已弃用,来自 802.11mc 标准的新 RTT 协议必须与三边测量算法一起使用。 https://android-developers.googleblog.com/2018/03/previewing-android-p.html

需要知道 AP 的 X、Y 位置才能准确定位,并且 AP 应该支持 802.11mc 的精细时间测量。英特尔® Wireless-AC 9260 支持 802.11mc,一些 AP 开始支持 802.11mc 标准。

几个例子:

于 2018-06-05T10:54:07.133 回答
2

来自WifiManager#EXTRA_RESULTS_UPDATED

注意:拥有android.Manifest.permission.NETWORK_SETTINGS权限的应用不受扫描限制。

注意:这是一个系统权限,普通应用程序无法使用它,除非生根并将应用程序移动到“特权”位置或将其烘焙到自定义 ROM 中。

于 2018-08-20T22:11:36.220 回答
2

我猜想目的是让开发人员/用户至少使用 WifiRttManager 代替室内位置 [1]。或者依靠通常的 Google Play 定位服务,这在某些用例中是一种选择,但绝对不是全部。它针对一般用例进行了优化。没有用例是平均用例。

不幸的是,WifiRttManager 计算位置的方式要求 wifi 接入点具有 802.11mc。但是,您不需要连接到这些点。今天几乎 0 个路由器有这个标准。[2] [3] [4] 使用 3 个接入点,您可以获得接近 1-2m 精度的位置。

谁知道他们是否也会对此功能施加限制。我不高兴这个功能从用户和开发者手中被夺走——它所需要的只是一个许可。

因此,在 802.11mc 流行之前,室内定位似乎将在未来几年进入黑暗时代。也许一种解决方法是让您连接到的设备并 ping 它们。

[1] https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager [2] https://github.com/Plinzen/android-rttmanager-sample

补充阅读 [3] https://en.wikipedia.org/wiki/IEEE_802.11mc [4] https://fit-iot.com/web/wifi-indoor-positioning/

于 2019-04-07T04:22:14.250 回答
1

我认为谷歌正计划限制应用程序扫描 wifi。

此方法在 API 级别 28 中已弃用。应用程序触发扫描请求的功能将在未来版本中删除。 在此处查看文档。

于 2018-10-25T13:01:38.317 回答