正确使用Android 9中的wifi RTT

时间:2018-08-20 20:25:01

标签: android android-wifi wifimanager android-9.0-pie

Android 9(Pie)引入了wifi RTT ranging,用于基于wifi的凝胶定位。

在Android 8(Oreo)之前的版本中,应用程序会定期请求wifi扫描。此功能在Android 9中得到了throttled的广泛支持:前台应用现在可以在2分钟的时间内请求最多4次扫描;后台应用程序被限制为每30分钟对所有后台应用程序进行一次扫描。避免这种限制的唯一方法是NETWORK_SETTINGS权限,但是,它是签名权限(我认为这意味着它需要使用与OS构建相同的密钥进行签名,而不管它是否是系统。应用程序),因此不适用于第三方应用程序。

我知道wifi RTT测距只能通过ScanResult启动,因此我需要先运行wifi扫描。但是,我大概可以通过对几个RTT测距请求重用相同的扫描结果来绕过节流阀,但会在一段时间内没有获得新的wifi。

但是,文档中也提到了对WiFi RTT测距的限制,但是没有说明限制是什么。

最后,WifiManager.startScan() is deprecated和应用可能不再能够在以后的版本中开始扫描。

问题:

  • 请求wifi RTT测距的限制是什么?
  • 获取ScanResult的正确方法是什么,我需要启动RTT测距请求?

1 个答案:

答案 0 :(得分:0)

我还没有看到有关限制的任何文档,但是从Android源代码中至少可以看到以下内容:

  • 背景应用程序每30分钟只能运行一次
  • 每个应用程序最多
  • 每个队列中最多20个测距请求

Wifi RTT服务实现的源代码在这里: https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/android-9.0.0_r3/service/java/com/android/server/wifi/rtt/RttServiceImpl.java

Google已关闭“问题跟踪”中的大多数WiFi节流线程,并带有注释“将用于改进未来的Android版本”,但是类似这样的活动: https://issuetracker.google.com/issues/112688545 你能在那儿提问题吗?