Как отключить NFC EventListener, когда перед чтением второго значения? - PullRequest
0 голосов
/ 07 ноября 2018

Эта проблема возникла из-за слишком чувствительной метки NFC. Когда я помещаю тег NFC один раз, тогда слишком много значений вводятся на мгновение. Таким образом, если введено одно значение тега NFC, то необходимо остановить прослушиватель событий NFC в этот момент. Как мне это реализовать?

Я думаю, что скорость чтения NFC между устройством и меткой NFC настолько высока, чем отмена EventListener на стороне программы.

эта ионная страница работает так ...

* 1) Первая загрузка ionViewDidEnter ()

2) Добавить addListenNFC ()

3) Если помечен NFC, то значение отправить в onNfcLogin (tagId)

4) В onNfcLogin (tagId) это включено "Поставщик почтового сервиса Http" как userService.nfclogin ()

5) Наконец, получите возвращение типа json со стороны сервера. *

{ "зависимости": { «ионно-нативный / ядро»: «4.7.0», «ионно-угловой»: «3.9.2», "машинопись": "~ 2.6.2"] }, «тестовое устройство»: «Galaxy8», «NFC Tag»: «дешевый NFC-флешка» }

  ionViewDidEnter() {
    this.nfc.enabled().then((resolve) => {
      this.addListenNFC();
    }).catch((reject) => {
      alert("NFC is not supported by your Device");
    });
  }


  addListenNFC() {
    this.nfc.addTagDiscoveredListener().subscribe(data => {
    //window.removeEventListener; //this is not working.
      if (data && data.tag && data.tag.id) {
        this.tagId = this.nfc.bytesToHexString(data.tag.id);
        if (this.tagId) {
          this.scanned = true;
          this.onNfcLogin(this.tagId);
        } else {
          alert('NFC_NOT_DETECTED');
        }
      }
    });
  }


  onNfcLogin(tagId) {
    this.userService.nfclogin(tagId).subscribe(data => { 
       // "this.userService.nfclogin()" is at Http post service provider
      this.getData = JSON.stringify(data);
      if (this.getData) {
        this.granted = true;
        this.loading.dismiss();
        this.events.publish('user:login');
        this.navCtrl.setRoot(HomePage);
      }
      this.resetScanData;
    },
      error => {
        this.loading.dismiss();
        this.showError(error);
      });
  }


  showError(error) {
    console.log(error);
    let alert = this.alertCtrl.create({
      title: 'Login Error',
      message: error.json().message,
      buttons: ['OK']
    });
    alert.present();
  }


  resetScanData() {
    this.granted = false;
    this.scanned = false;
    this.tagId = "";
  }

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я решил с этим кодом.

this.myListener = this.nfc.addNdefListener(() => {
   console.log(‘successfully attached ndef listener’);
},(err) => {
   console.log(‘error attaching ndef listener’, err);
}).subscribe((event) => {
  . . .
});

//remove listener
this.myListener.unsubscribe();

благодаря Avdm на ионном форуме. https://forum.ionicframework.com/t/remove-listener-nfc-plugin/113393

0 голосов
/ 07 ноября 2018

Вы можете получить только первую подписку с observable.take (1) .subscribe (...).
А затем заново создайте подписку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...