Ionic Android 问题:扫描功能不起作用

Posted

技术标签:

【中文标题】Ionic Android 问题:扫描功能不起作用【英文标题】:Ionic Android Issue: scan function not working 【发布时间】:2018-07-14 23:42:36 【问题描述】:

我是 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没有写在视频里,我已经写好了。

这是webview截图

this.setStatus 函数未定义。但是,在视频中,并没有声明该函数。我尝试声明

            setStatus:any

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

我在一开始就包含了 NgZone 组件。

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

【问题讨论】:

【参考方案1】:

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

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

slides 上的代码是缩写的。演示文稿中示例的源代码可在 github https://github.com/don/ionic-ble-examples

上获得

【讨论】:

以上是关于Ionic Android 问题:扫描功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 3 本地通知 LED/声音在 Android 中不起作用

输入最大长度在 Android -Ionic 上不起作用

Ionic/Angular HTTP post 请求在 android 上不起作用

ionic2 WebSocket 在 Android 应用程序中不起作用

Ionic 3.x:iOS 上的推送通知不起作用(适用于 Android?) Ionic Native Plugin Push

Ionic 功能在 Ionic View 中不起作用但在 Web 上起作用的潜在原因