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

时间:2018-03-08 16:48:17

标签: java android kotlin android-9.0-pie

如何从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未调用nodeManagerAdress:PORT/logs ,该列表包含无线网络AP,但更新速度非常慢

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

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

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

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

如果有替代解决方案,我也很乐意听到它。

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分: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的精细时间测量。英特尔®无线-AC 9260支持802.11mc,多个AP开始支持802.11mc标准。

几个例子:

答案 4 :(得分:1)

来自WifiManager#EXTRA_RESULTS_UPDATED

  

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

注意:这是系统权限,常规应用程序必须先将其扎根并将其移动到“特权”位置或将其烘焙到自定义ROM中才能使用。

答案 5 :(得分:1)

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

  

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

答案 6 :(得分:1)

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

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

谁知道他们是否也会对此功能施加限制。 根本没有任何借口让这种选择远离用户和开发人员。真恶心

因此,对于室内场所,似乎至少是一个黑暗的时代。 也许一种解决方法是让您连接到设备并对其进行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/