Я работаю над ионным приложением, которое считывает сердечный пульс и артериальное давление с умного браслета Bluetooth.Я использовал родной плагин ionic для доступа к функциям Bluetooth.В моем случае обнаружение и подключение к устройству работает нормально.Но когда я пытаюсь прочитать какой-либо сервис, он говорит: «Не удалось получить конкретный сервис».В моем коде testService()
- это просто функция, которую я создал для чтения указанной службы с устройства.
testService () function
testService(deviceId, service, charac) {
// Subscribe for notifications
this.ble.startNotification(deviceId, service, charac).subscribe(
data => this.onValueChange(data, service+"|"+charac),
() => this.alertMsg('Unexpected Error', 'Failed to subscribe for ' + service + " | " + charac)
);
// Read the current value
this.ble.read(deviceId, service, charac).then(
data => {
this.onValueChange(data, service+"|"+charac);
},
() => this.alertMsg('Unexpected Error', 'Failed to get ' + service + " | " + charac)
);
}
Это весь мой код JavaScript.
import { Component, ViewChild, NgZone } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, ToastController } from 'ionic-angular';
import { BLE } from '@ionic-native/ble';
import { Storage } from '@ionic/storage';
@IonicPage()
@Component({
selector: 'page-heart-rate',
templateUrl: 'heart-rate.html',
})
export class HeartRatePage {
private isConnected: boolean;
conDevice: any; //connected device
constructor(public navCtrl: NavController,
public navParams: NavParams,
private ble: BLE,
private storage: Storage,
private alertCtrl: AlertController,
private toastCtrl: ToastController,
private ngZone: NgZone
) {
}
ionViewDidEnter() {
this.isConnected = false;
this.storage.get('last-connected-device').then((val) => { //check if a device is connected
this.ble.isConnected(String(val.id)).then(
() => {
this.conDevice = val;
this.isConnected = true;
this.testService(this.conDevice.id, "180D", "2A37"); //reading the service (heart rate)
},
() => {
}
);
}).catch( err => {
});
}
//this method will read device for a specified service
testService(deviceId, service, charac) {
// Subscribe for notifications
this.ble.startNotification(deviceId, service, charac).subscribe(
data => this.onValueChange(data, service+"|"+charac),
() => this.alertMsg('Unexpected Error', 'Failed to subscribe for ' + service + " | " + charac)
);
// Read the current value
this.ble.read(deviceId, service, charac).then(
data => {
this.onValueChange(data, service+"|"+charac);
},
() => this.alertMsg('Unexpected Error', 'Failed to get ' + service + " | " + charac)
);
}
onValueChange(buffer:ArrayBuffer, text:string) {
var data = new Float32Array(buffer);
var dataString = String.fromCharCode.apply(null, data);
this.ngZone.run( () => {
let toast = this.toastCtrl.create({
message: 'value change: ' + text +'::'+ data[0],
duration: 2000
});
toast.present();
} );
}
//this method will popup an alert
alertMsg(title, message) {
let alert = this.alertCtrl.create({
title: title,
message: message,
buttons: [
{
text: 'Ok'
}
]
});
alert.present();
}
}
Может ли кто-нибудь помочь мне определить, что я здесь сделал не так?