2016-09-22 50 views

回答

2

我写了一个小libary到COMPAT类内包装隐藏的API调用:

Android RttManagerCompat

的LIB利用Java反射来获取访问API,基本上它似乎工作。

更新:

  • 该应用程序必须安装在系统/私法 - 应用程序/文件夹
  • 因此手机必须扎根。

更新:

  • 的Android的设施提供了一个公共API,这使得该库已过时。
2

Android P开始,现在有一个用于Wi-Fi RTT(IEEE 802.11mc)的公共API。

WiFiRttManager

以下内容添加到您的AndroidManifest:

<manifest ...> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-feature android:name="android.hardware.wifi.rtt" /> 
    ... 
</manifest> 

获取WiFiRttManager的实例:

final WifiRttManager rttManager = (WifiRttManager) context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE); 

检查设备是否支持RTT测量:

rttManager.isAvailable(); 

执行测距:

// A ScanResult can be retrieved by e.g. perform a WiFi scan for WiFi's in range -> https://developer.android.com/reference/android/net/wifi/ScanResult.html 
final RangingRequest request = new RangingRequest.Builder() 
           .addAccessPoint(scanResult) 
           .build(); 
final RangingResultCallback callback = new RangingResultCallback() { 
    public void onRangingResults(List<RangingResult> results) { 
     // Handle result, e.g. get distance to Access Point 
    } 

    public void onRangingFailure(int code) { 
     // Handle failure 
    } 
}; 
// Start ranging and return result on main thread. 
rttManager.startRanging(request, callback, null); 

请注意,该接入点支持Wi-Fi无线RTT(IEEE 802.11mc)以及!