如何从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
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
我认为在API级别P他们计划将startScan()移动到不同的类(WifiScanner)以及一些关键差异。
如果有另一种解决方案,我也很乐意听到它。
目前,我可能只使用startScan()直到官方文档发布。
因为我提出了Google Issue 79906367,所以startScan()在P上实际上是非常错误的。
我不认为WifiScanner也是替代品,因为它被标记为SystemApi,这意味着无法访问Apps ...
希望我们很快就能听到,因为RTT仍然意味着你需要使用ScanResult is80211mcResponder扫描支持802.11mc的AP,你在AP上执行RTT测距之前检查它。
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标准。
几个例子:
我认为谷歌计划限制扫描wifi的应用程序。
此方法在API级别28中已弃用。应用程序触发扫描请求的功能将在以后的版本中删除。 Check the documentation here.
来自WifiManager#EXTRA_RESULTS_UPDATED
注意:持有android.Manifest.permission.NETWORK_SETTINGS权限的应用程序可免于扫描限制。
注意:这是系统权限,常规应用程序无法使用它而无法使用它并将应用程序移动到“特权”位置或将其烘焙到自定义ROM中。
看来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
补充阅读