React native 在react native nfc manager v2中禁用声音
react native nfc manager的版本2应该支持禁用扫描声音(),但是它似乎不起作用 这是电话: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
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的平台特定方法,其中asFLAG\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
});