如何在React Native中检测耳机/耳麦是否连接到了Android设备上?

2 人关注

我正在制作一个呼叫应用程序,用户可以使用或不使用耳机/耳麦。在传入的视频通话中,我正在使用 react-native-incall-manager 来打开扬声器/允许扬声器电话。基本的 InCallManager.start({ media: 'video' }); 方法可以工作,并允许检测正在插入的新音频设备,如耳机,如果发生这种情况,插入的耳机和麦克风就会如期工作。

问题出现在呼叫开始前耳机已经插在设备上的情况下,因为 InCallManager.setSpeakerphoneOn(true); 方法在那时被调用。替换代码0】不考虑已经连接的设备,耳机不工作,正常的扬声器工作,即使耳机被插入。

react-native-incall-manager 推荐使用 react-native 中的 DeviceEventEmitter 来检测本地事件,如连接的音频设备的变化。 废弃的 .

这里建议使用 NativeEventEmitter ,但这似乎非常复杂,似乎需要编写本地Java(Android)模块并与之配合使用。

如何在React Native中检测Android中连接的音频设备的变化?

android
react-native
Mr. Robot
Mr. Robot
发布于 2020-05-03
1 个回答
Konstantin
Konstantin
发布于 2020-10-14
已采纳
0 人赞同

这里建议使用NativeEventEmitter,但这似乎非常复杂,似乎需要编写本地Java(Android)模块并与之配合使用。

你不需要为这项工作编写一个本地Java模块,因为 NativeEventEmitter 可以接收通过 RCTDeviceEventEmitter 发送的事件。

因此,来自 react-native-incall-manager 的例子README

import { DeviceEventEmitter } from 'react-native';
DeviceEventEmitter.addListener('Proximity', function (data) {
    // --- do something with events

可以很容易地改写成这样

import { NativeEventEmitter, NativeModules } from 'react-native';
const eventEmitter = new NativeEventEmitter(NativeModules.InCallManager);
eventListener = eventEmitter.addListener('Proximity', event => {
  // do something with events

一旦你不再需要事件监听器,就不要忘记清理。

eventListener.remove();