我正在使用react-native-agora进行项目。在我的旧版Android Ver5(lolipop)中工作正常,但在我的新版Android vivo Ver8.1.0(oreo)中不工作。
我曾经按照agora文档的说法在免提电话和接收器之间切换,
rtcEngine.setEnableSpeakerphone(true) -> for speakerphone
rtcEngine.setEnableSpeakerphone(false) -> for receiver
这是我以下用于初始化RtcEngine的代码
const rtcEngine = await RtcEngine.create(appId)
rtcEngine.addListener('UserJoined', (uid, elapsed) => { })
rtcEngine.addListener('UserMuteAudio', (uid, reason) => { })
rtcEngine.addListener('UserOffline', (uid, reason) => { })
rtcEngine.joinChannel(appId, channelName, null, 0)
rtcEngine.muteLocalAudioStream(mute)
rtcEngine.setEnableSpeakerphone(speaker)
这是我如何切换值
<TouchableOpacity style={styles.footerBtnContainer} onPress={ () => { setSpeaker(!speaker); }} >
<IonIcon name="volume-mute-outline" style={speaker?styles.footIconOn:styles.footIconOff} />
</TouchableOpacity>
这是我更改值的状态
const [ speaker, setSpeaker] = useState(false);
还有我的package.json
"dependencies": {
"@react-native-community/masked-view": "^0.1.10",
"@react-navigation/native": "^5.8.2",
"@react-navigation/stack": "^5.11.1",
"agora-rn-uikit": "^3.0.1",
"react": "16.13.1",
"react-native": "0.62.2",
"react-native-agora": "^3.1.2",
"react-native-gesture-handler": "^1.8.0",
"react-native-mo-fs": "^0.1.24",
"react-native-reanimated": "^1.13.1",
"react-native-safe-area-context": "^3.1.8",
"react-native-screens": "^2.12.0",
"react-native-vector-icons": "^7.1.0"
},
答案 0 :(得分:1)
每次都需要调用 setEnableSpeakerphone
方法来切换扬声器和听筒。我假设您正在尝试使用状态值在它们之间进行更改。使用您的代码,它只会在您初始化 RtcEngine 时执行一次。当您按按钮翻转状态时,该功能不会执行 - 所以没有效果。您必须编辑代码以每次都调用 setEnableSpeakerphone
。我建议按如下方式定义一个函数:
const toggleDevice = async () => {
await this._engine?.setEnableSpeakerphone(!speaker);
setSpeaker(speakerValue => !speakerValue)
};
并编辑您的按钮以调用 toggleDevice 函数 - onPress={toggleDevice}