Ionic Android 问题:扫描功能不工作

Ionic Android Issue: scan function not working

我是 angularjs 和 ionic cordova 的新手。我正在关注这个关于 ionic cordova BLE 插件模块的视频讲座中给出的代码。我正在尝试使用 ionic 3 来完成这项工作,并为 BLE 安装了 ionic cordova 插件。

https://www.youtube.com/watch?v=chfXawb_eVY&t=1898s

我已按照确切的说明进行操作。这是我的代码文件:

app.module.ts

  import { BrowserModule } from '@angular/platform-browser';
  import { ErrorHandler, NgModule } from '@angular/core';
  import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
  import { SplashScreen } from '@ionic-native/splash-screen';
  import { StatusBar } from '@ionic-native/status-bar';
  import { BLE } from '@ionic-native/ble';
  import { MyApp } from './app.component';
  import { HomePage } from '../pages/home/home';

  @NgModule({
   declarations: [
   MyApp,
   HomePage
 ],
  imports: [
   BrowserModule,
   IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
  MyApp,
  HomePage
],
 providers: [
 StatusBar,
 SplashScreen,
 {provide: ErrorHandler, useClass: IonicErrorHandler},
  BLE
    ]
   })        export class AppModule {}

home.ts

     import { Component, NgZone } from '@angular/core';
     import { NavController } from 'ionic-angular';
     import { BLE } from '@ionic-native/ble';
     import { ToastController } from 'ionic-angular';
     import { setTimeout } from 'core-js/library/web/timers';



     @Component({
     selector: 'page-home',
     templateUrl: 'home.html'
     })
     export class HomePage {

     devices: any[] = [];
     statusMessage:string;

     constructor(public navCtrl: NavController,
          public toastCtrl: ToastController,
          private ble: BLE,
          private ngZone: NgZone) {

        }

   scan(){
     this.setStatus('Scanning for bluetooth LE devices');
     this.devices = [];

     this.ble.scan([], 2).subscribe(

     device=>this.onDeviceDiscovered(device),
     error=>this.scanError(error)
     );  
     setTimeout(this.statusMessage.bind(this),5000,'Scan Complete');
   }


    onDeviceDiscovered(device){
     console.log('Scanning');
     console.log('Discovered ' + JSON.stringify(device,null,2));
     this.ngZone.run(()=>{
     this.devices.push(device);
    });
    } 

     scanError(error) {
     console.log('Check your bluetooth connection');
    }

   }

home.html

    <ion-header>
    <ion-navbar>
      <ion-title>
         BLE Scanner
         </ion-title>
        <ion-buttons end>
        <button ion-button (click)="scan()">
                 Scan
           </button>
    </ion-buttons>
    </ion-navbar>
    </ion-header>

   <ion-content>
       <ion-list>
       <button ion-item *ngFor="let device of devices">
         <h2>{{ device.name || 'Unnamed' }}</h2>
         <p>{{ device.id }}</p>
         <p>RSSI:{{ device.rssi }}></p>
       </button>
   </ion-list>  
  </ion-content>

函数scanError在视频里没有写,我写了

这是网页视图截图

this.setStatus 函数未定义。但是,在视频中,该功能尚未声明。我尝试通过声明

            setStatus:any

但该函数仍然显示相同的消息。另外,即使我删除了 setStatus 函数,我也无法在控制台中收到任何消息。

我在开头包含了 NgZone 组件。

有什么办法可以解决这个问题,还是我遗漏了什么?

您需要在代码中编写一个 setStatus 函数。

setStatus(message) {
  console.log(message);
  this.ngZone.run(() => {
    this.statusMessage = message;
  });
}

代码在slides is abbreviated. The source code for the examples in the presentation is available on github https://github.com/don/ionic-ble-examples