Какова оптимальная структура приложения BLE в ионном с плагином Cordova - PullRequest
0 голосов
/ 17 октября 2018

Я разрабатываю приложение BLE в Ionic 4 с Cordova.Я реализовывал логику из этого репозитория GitHub: https://github.com/don/ionic-ble-examples/blob/master/scan/src/pages/home/home.ts

, но я хочу создать Bluetooth-сервис и вызвать функцию сканирования в ngOnInit.Я назначаю массив найденных устройств в методе viewDidLoad.

Но я не уверен, является ли это чистой реализацией BLE.Тем более я не знал, когда вызывать разные состояния (сканировать, назначать найденные устройства массиву).

Когда я запускаю свое приложение на устройстве ios, я нахожу устройства Bluetooth, и они перечислены в массиве.

Мой репозиторий можно найти здесь: https://github.com/goodcare/tobimat

спасибо за вашу помощь!

1 Ответ

0 голосов
/ 17 октября 2018

Я бы предложил это:

Сделать BluetoothService как в

@Injectable()
export class BluetoothService {
    constructor(private _ble: BLE) {

    }

    //make all the api level calls here and maybe more if you want to cache it and use the infos from here later on in the app.

    scan() {
       return this._ble.scan();
    }

}

Далее, Сделайте модель устройства

export class DeviceNameModel {
    constructor(private _ble: BLE) {}

    deviceSpecificFunction() {}

    turnOnLamp() {
       this._ble.write(some arraybuffer);
    }

}

И, наконец, на вашей странице /s:

сканирование страницы для сканирования и подключения к устройству.

  export class ScanPage() {
     private _myDevice: DeviceNameModel;
            scannedDevices: DeviceNameModel

            constructor(private _ble: BLE){}

            ngOnInit() {
              this._ble.scan(scanTime)
                .filter(filter predicate to remove devices that you don't ever 
                        need to connect to)
                .subscribe((response: DeviceNameModel[]) => {
                   this.scannedDevices = response;
                });
            }

            connectTo(device: DeviceNameModel) {
               this._ble.connect(device).subscribe(() => do sth);
            }
    }

Домашняя страница для взаимодействия с подключенным устройством.

export class HomePage implements OnInit {
    private _myDevice: DeviceNameModel;

    constructor(private _ble: BLE){
      this._myDevice = new DeviceNameModel(_ble);
    }

    onToggle(event: boolean) {
        return event ? this._myDevice.turnOnLamp() : this._myDevice.turnOffLamp();
    }
}

Обратите внимание, что большая часть этого кода является псевдо-вспомогательным кодом, и вам необходимо адаптировать свои службы, модели и страницы к вашим потребностям.

...