使用agora反应本机无法正常运行RtcEngine。 setEnableSpeakerPhone()

时间:2020-11-05 06:20:53

标签: react-native react-native-android agora.io

我正在使用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"
 },

1 个答案:

答案 0 :(得分:1)

每次都需要调用 setEnableSpeakerphone 方法来切换扬声器和听筒。我假设您正在尝试使用状态值在它们之间进行更改。使用您的代码,它只会在您初始化 RtcEngine 时执行一次。当您按按钮翻转状态时,该功能不会执行 - 所以没有效果。您必须编辑代码以每次都调用 setEnableSpeakerphone。我建议按如下方式定义一个函数:

const toggleDevice = async () => {
  await this._engine?.setEnableSpeakerphone(!speaker);
  setSpeaker(speakerValue => !speakerValue)
};

并编辑您的按钮以调用 toggleDevice 函数 - onPress={toggleDevice}