0

我一直在如何最好地處理髮現的外圍設備的設備數據方面遇到一些問題,並想看看是否有人可以對此發光。使用離子v2和BLE Central插件處理設備數據

我能夠完美地掃描設備,並且我的「成功」回調也能正常工作。我想要做的是創建一個列表,顯示找到的設備並連接到所選的設備。我用ng重複創建列表沒有問題,但我不確定如何處理成功函數返回的數據。我怎樣才能將每個外設保存到一個數組中,以便我可以訪問每個外設的名稱,id,rssi等?我已經嘗試了在函數之外創建一個數組來存儲外圍設備,並且這在starScanning函數內工作得非常好,但是我無法從成功回調函數中將它們推入數組中。如果我只是將掃描結果存儲在startScanning函數內的數組中,那足夠了嗎?

startScanning = function() { 

this.ble.startScan([], this.success).subscribe(device => { 
    console.log(JSON.stringify(device.name)); 
}); 
this.isScanning = true; 
this.presentLoading(); 


setTimeout(() => { 
    this.ble.stopScan().then(() => { 
    console.log("Scanning has stopped"); 

    this.isScanning = false; 
    }); 
    }, 3000); 

} 

success = function(peripheral) { 

    console.log("Success Callback called"); 
    console.log(peripheral.rssi); 


} 

回答

2

您可以處理在subscribe回調從掃描返回的數據(startScan方法應該僅根據docs採取服務爲參數數組:

this.scanSubscription = this.ble.startScan([]) 
    .subscribe(device => { 
    // device will have an id property that you can use to connect 
    this.devices.push(device); // devices is an array on your component 
    }); 

現在,你可以使用*ngFor地遍歷數組devices,重視的是傳遞設備ID的點擊處理:

<ion-list> 
     <ion-item *ngFor="let device of devices" (click)="connectToDevice(device.id)">{{device.id}}</ion-item> 
    </ion-list> 

connectToDevice()需要設備ID和連接:

connectToDevice(id: string) { 
    this.connectSubscription = this.ble.connect(id) 
     .subscribe((data) => { 
     console.log('Successfully connected!'); 
     }); 
} 

有兩點要注意:

  • 它被認爲很好的做法存儲訂閱,你的頁面的性能/組件,以便您可以撥打unsubscribe()他們當一個頁面/組件被銷燬,以防止內存泄漏
  • 我建議檢查出startScanWithOptions函數,因爲你可以通過reportDuplicates選項false值忽略複製設備

看看我Github repo(尤其是頁面文件bluetooth.ts)的工作演示應用程序(這裏使用了startScanWithOptions功能我上面提到的,但功能是相同的)