Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 在react native nfc manager v2中禁用声音_React Native_Nfc - Fatal编程技术网

React native 在react native nfc manager v2中禁用声音

React native 在react native nfc manager v2中禁用声音,react-native,nfc,React Native,Nfc,react native nfc manager的版本2应该支持禁用扫描声音(),但是它似乎不起作用 这是电话: NfcManager.registerTagEvent({ alertMessage: 'my message', readerModeFlags: NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS }); 但它不起作用… 我做错什么了吗? 我使用的是react native 0.62.2,react native nfc man

react native nfc manager的版本2应该支持禁用扫描声音(),但是它似乎不起作用

这是电话:

NfcManager.registerTagEvent({

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

});
但它不起作用…
我做错什么了吗?
我使用的是react native 0.62.2,react native nfc 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
从“React”导入React
进口{
视图、文本、可触摸不透明度
}从“反应本机”
从“react native nfc manager”导入NfcManager,{NfcEvents,NfcAdapter};
类应用程序扩展了React.Component{
componentDidMount(){
console.log('NfcManager.start()'))
NfcManager.start();
console.log('NfcManager.setEventListener()'))
NfcManager.setEventListener(NfcEvents.DiscoverTag,标记=>{
console.log('NfcEvents.DiscoverTag')
console.warn('tag',tag');
setAlertMessageIOS('我得到了你的标签!');
//NfcManager.unregisterTagEvent().catch(()=>0);
});
这个;
}
组件将卸载(){
NfcManager.setEventListener(NfcEvents.DiscoverTag,null);
NfcManager.unregisterTagEvent().catch(()=>0);
}
render(){
返回(
NFC演示
听
取消收听
)
}
_取消=()=>{
NfcManager.unregisterTagEvent().catch(()=>0);
}
_listen=async()=>{
试一试{
//等待NfcManager.registerTagEvent({alertMessage:'my message',readerModeFlags:NfcAdapter.FLAG\u READER\u NO\u PLATFORM\u SOUNDS});
等待NfcManager.RegisterTageEvent({
alertMessage:'我的消息',
//当我添加isReaderModeEnabled时,标记扫描停止工作
//isReaderModeEnabled:为true,
readerModeFlags:NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
});
}捕获(ex){
控制台。警告('ex',ex);
NfcManager.unregisterTagEvent().catch(()=>0);
}
}
}
导出默认应用程序

更新:
对于ios来说是不可能的,并且应该适用于android(它确实在本地工作) 该undocumented标志非常特定于此库中的undocumented Advanced Android Native direct
enableReaderMode
API用法

iOS NFC API和基本的旧版Android API无法控制平台在标签检测时发出的声音

其他特定于Android的
看看Android的代码

据报道,以下方法似乎部分有效(我注意到它设置了其他高级选项,这意味着它可能只会每10秒检测一次标记)


谢谢安德鲁。当我添加isReaderModeEnabled时,标记扫描停止工作。。。我在我的问题中添加了所有代码。我注意到,随着使用的代码越来越多,您使用了
NfcManager.setAlertMessageIOS
,这是一种针对IOS的平台特定方法,其中as
FLAG\u READER\u NO\u platform\u SOUNDS
非常特定于Android API>=19。你能确认你的目标是哪个平台吗,因为一些NFC的东西是非常特定于平台的。我重新检查了这个库的工作方式,使用readerMode,你还需要在
readerModeFlags
中指定卡类型(与你在本机Java中的做法完全相同),所以我更新了答案,以包括大多数标记类型,没有这些额外的标志将与正在扫描和忽略的标记一致,但当它们被扫描到哪里时,您将不会听到声音。应该为NfcManager检查平台。setAlertMessageIOS。。。我的目标是两个平台。我认为FLAG_READER_NO_PLATFORM_听起来对这两种平台都有好处……更新了答案,我在Android特定内容中留下了,因为我还注意到,在ReaderMode中,它还设置了一个标志,可能会导致它每10秒只检测一次标签。(太长了,我使用相同的标志,值为0.25s)
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

});