WifiRttManager Demo

private WifiRttManager wifiRttManager;
private WifiManager wifiManager;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    // ... ...
 
    if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {
        Object service = this.getApplicationContext().getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
        if(service instanceof WifiRttManager) {
            wifiRttManager= (WifiRttManager) service;
            Log.i(TAG, "Get WifiRttManager Succ.");
        }
 
        wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
 
        IntentFilter wifiFileter = new IntentFilter();
        wifiFileter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        wifiFileter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        wifiFileter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(new WifiChangeReceiver(), wifiFileter);
    }
 
    // ... ...

 
private void startScanAPs() {
    wifiManager.setWifiEnabled(true);
    wifiManager.startScan();
}
 
class WifiChangeReceiver extends BroadcastReceiver {
    @RequiresApi(api = 28)
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
            List<ScanResult> scanResults = wifiManager.getScanResults();
            Log.i(TAG, "Wifi Scan size:" + scanResults.size());
            for(ScanResult scanResult:  scanResults) {
                Log.i(TAG, scanResult.toString());
                RangingRequest.Builder builder = new RangingRequest.Builder();
                builder.addAccessPoint(scanResult);
                wifiRttManager.startRanging(builder.build(), new RangingResultCallback() {
                    @SuppressLint("Override")
                    @Override
                    public void onRangingFailure(int i) {
                        // TODO 
                    }
                    @SuppressLint("Override")
                    @Override
                    public void onRangingResults(List<RangingResult> list) {
                        // TODO get result from list
 
                        for(RangingResult result : list) {
                            Log.i(TAG, result.toString());
                        }
                    }
                }, new Handler());
            }
        }
    }

}



使用WiFi RTT時,需要在AndroidManifest.xml中增加如下聲明:

<uses-feature android:name="android.hardware.wifi.rtt" />


通過上面的簡單代碼,就能夠實現WiFi RTT的功能。


WiFi RTT功能適用於複雜地形的大型室內外場所,如商場、娛樂場所、大型休閒、遊樂場等等,提供場所內的局部區域精確化導航等功能。相信在很快的時間內,就能夠在各大地圖應用內體驗到這項便利功能,對於路癡、地圖盲的夥伴們將是極大的福音。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章