在Android P中弃用WifiManager中的startScan()

问题描述 投票:18回答:7

如何从wifi获取扫描结果,例如每3秒,没有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

java android kotlin android-9.0-pie
7个回答
11
投票

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


7
投票

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

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

如果有另一种解决方案,我也很乐意听到它。

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


6
投票

因为我提出了Google Issue 79906367,所以startScan()在P上实际上是非常错误的。

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

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


2
投票

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

AP的X,Y位置应该是knonw以便精确定位,AP应该支持802.11mc的精细时间测量。英特尔®Wireless-AC 9260支持802.11mc,多个AP开始支持802.11mc标准。

几个例子:


1
投票

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

此方法在API级别28中已弃用。应用程序触发扫描请求的功能将在以后的版本中删除。 Check the documentation here.


1
投票

来自WifiManager#EXTRA_RESULTS_UPDATED

注意:持有android.Manifest.permission.NETWORK_SETTINGS权限的应用程序可免于扫描限制。

注意:这是系统权限,常规应用程序无法使用它而无法使用它并将应用程序移动到“特权”位置或将其烘焙到自定义ROM中。


1
投票

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

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

谁知道他们是否会对这个功能施加限制。没有任何借口可以从用户和开发人员那里做出这种选择。恶心。

所以看来至少会有一个室内位置的黑暗时代。也许解决方法是让您连接的设备和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/

© www.soinside.com 2019 - 2024. All rights reserved.