如何使用 expo-av 在本机反应中播放背景音频?
Posted
技术标签:
【中文标题】如何使用 expo-av 在本机反应中播放背景音频?【英文标题】:How to play background audio in react native using expo-av? 【发布时间】:2020-08-23 13:07:38 【问题描述】:我正在使用 expo 构建一个反应原生应用程序。我正在使用“expo-av”。
我的音频文件无法在后台播放。
我有以下内容,但当我将我的应用程序切换到另一个应用程序时仍然无法让它工作。我没有收到任何错误;音乐只是在我的应用程序中停止。关于如何让它发挥作用的任何建议?还是我的代码可能在其他地方关闭?
async componentDidMount()
try
await Audio.setAudioModeAsync(
allowsRecordingios: false,
interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS,
// interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
playsInSilentModeIOS: true,
interruptionModeandroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
shouldDuckAndroid: true,
staysActiveInBackground: true,
playThroughEarpieceAndroid: true
)
this.loadAudio();
// this.interval = setInterval(() => this.getStatus(), 1000);
catch (e)
console.log(e)
【问题讨论】:
【参考方案1】:一切都与这些参数一起工作:
Audio.setAudioModeAsync(
allowsRecordingIOS: false,
staysActiveInBackground: true,
interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
playsInSilentModeIOS: true,
shouldDuckAndroid: true,
interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
playThroughEarpieceAndroid: false
);
在 package.json 中 "expo-av": "^6.0.0",
在播放器中:
componentDidMount()
Audio.setAudioModeAsync(
allowsRecordingIOS: false,
staysActiveInBackground: true,
interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
playsInSilentModeIOS: true,
shouldDuckAndroid: true,
interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
playThroughEarpieceAndroid: false
);
this._loadNewPlaybackInstance(true);
async _loadNewPlaybackInstance(playing)
if (this.playbackInstance != null)
await this.playbackInstance.unloadAsync();
this.playbackInstance = null;
const source = uri: 'http://music.ru/music.mp3' ;
const initialStatus =
shouldPlay: playing,
rate: this.state.rate,
shouldCorrectPitch: this.state.shouldCorrectPitch,
volume: this.state.volume,
isMuted: this.state.muted,
isLooping: this.state.loopingType === LOOPING_TYPE_ONE
// // UNCOMMENT THIS TO TEST THE OLD androidImplementation:
// androidImplementation: 'MediaPlayer',
;
const sound, status = await Audio.Sound.createAsync(
source,
initialStatus,
this._onPlaybackStatusUpdate
);
this.playbackInstance = sound;
【讨论】:
您能解释一下为什么您的更改有效吗?原始海报缺少什么? 也许 playThroughEarpieceAndroid: false 你这个摇滚人,这完全符合我的预期!在我的代码中,我只是在实际运行.playAsync()
方法之前使用了关于添加Audio.setAudioModeAsync(...)
设置的第一部分。太好了!!!以上是关于如何使用 expo-av 在本机反应中播放背景音频?的主要内容,如果未能解决你的问题,请参考以下文章
使用本机反应播放 .Flac 或 .Alac 文件,甚至可以在 iPhone 上使用吗?
ReactNative:Expo-AV 将声音播放对象放入 Redux 存储是不是可以/正确?