Отключить звук в react-native-nf c -manager v2 - PullRequest
0 голосов
/ 11 июля 2020

Версия 2 response-native-nf c -manager должна поддерживать отключение звука сканирования (https://github.com/whitedogg13/react-native-nfc-manager/issues/60#issuecomment -464352677 ), однако, похоже, это не работает.

Это вызов:

NfcManager.registerTagEvent({

   alertMessage: 'my message',
    readerModeFlags: NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS

});

, но он не работает ... Я что-то не так делаю? Я использую response-native 0.62.2, react-native-nf c -manager 2.1.7

Вот весь код:

import React from 'react'
import {
  View, Text, TouchableOpacity
} from 'react-native'
import NfcManager, {NfcEvents, NfcAdapter} from 'react-native-nfc-manager';

class App extends React.Component {
  componentDidMount() {
    console.log('NfcManager.start()')
    NfcManager.start();
    console.log('NfcManager.setEventListener()')
    NfcManager.setEventListener(NfcEvents.DiscoverTag, tag => {
      console.log('NfcEvents.DiscoverTag')
      console.warn('tag', tag);
      NfcManager.setAlertMessageIOS('I got your tag!');
      //NfcManager.unregisterTagEvent().catch(() => 0);
    });
    this._listen();
  }

  componentWillUnmount() {
    NfcManager.setEventListener(NfcEvents.DiscoverTag, null);
    NfcManager.unregisterTagEvent().catch(() => 0);
  }

  render() {
    return (
      <View style={{padding: 20}}>
        <Text>NFC Demo</Text>
        <TouchableOpacity
          style={{padding: 10, width: 200, margin: 20, borderWidth: 1, borderColor: 'black'}}
          onPress={this._listen}
        >
          <Text>Listen</Text>
        </TouchableOpacity>

        <TouchableOpacity
          style={{padding: 10, width: 200, margin: 20, borderWidth: 1, borderColor: 'black'}}
          onPress={this._cancel}
        >
          <Text>Cancel listening</Text>
        </TouchableOpacity>
      </View>
    )
  }

  _cancel = () => {
    NfcManager.unregisterTagEvent().catch(() => 0);
  }

  _listen = async () => {
    try {
      //await NfcManager.registerTagEvent({alertMessage: 'my message', readerModeFlags: NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS});
      await NfcManager.registerTagEvent({
         alertMessage: 'my message',
         // when I added isReaderModeEnabled, tag scanning stopped working
         //isReaderModeEnabled: true,
         readerModeFlags: NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
      });
    } catch (ex) {
      console.warn('ex', ex);
      NfcManager.unregisterTagEvent().catch(() => 0);
    }
  }
}

export default App

1 Ответ

1 голос
/ 11 июля 2020

Обновление: Невозможно для ios и предполагается, что он работает для android (он работает изначально). Этот недокументированный флаг очень специфичен c к недокументированному в этой библиотеке. Расширенный Android Собственное прямое enableReaderMode Использование API.

API iOS NF C и базовые c старые Android API не контролируют звуки, издаваемые платформой при обнаружении тегов.

Дополнительно Android Спецификация c И глядя на код для Android https://github.com/whitedogg13/react-native-nfc-manager/blob/master/android/src/main/java/community/revteltech/nfc/NfcManager.java

Следующее, как сообщается, частично работает (я отмечаю, что он устанавливает другие расширенные параметры, которые означают, что он, вероятно, только обнаружит тегировать каждые 10 секунд)

NfcManager.registerTagEvent({

   alertMessage: 'my message',
   isReaderModeEnabled: true,
   readerModeFlags: NfcAdapter.FLAG_READER_NFC_A |
                    NfcAdapter.FLAG_READER_NFC_B |
                    NfcAdapter.FLAG_READER_NFC_F |
                    NfcAdapter.FLAG_READER_NFC_V |
                    NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS

});
...