大家好,我正在用博览AV播放我的“反应本地”(世博管理)应用程序中的声音,这些音频在android上播放得很好,但在ios上却没有声音,苹果也因此拒绝了应用程序商店的应用程序。
他们说
您的应用程序在UIBackgroundModes键中声明了对音频的支持,但不包括需要持久音频的功能。 下一步 音频键用于在后台向用户提供可听内容的应用程序,例如音乐播放器或流媒体音频应用程序。请修改您的应用程序,以提供可听的内容,而该应用程序在后台或删除“音频”设置从UIBackgroundModes键。
这是世博av音频模式的设置。
Audio.setAudioModeAsync({
staysActiveInBackground: true,
shouldDuckAndroid: true,
interruptionModeIOS: 1,
interruptionModeAndroid: 1,
allowsRecordingIOS: true,
playsInSilentModeIOS: false,
})
我播放的声音是这样的
const {sound} = await Audio.Sound.createAsync(
{uri: audioURI},
{
shouldPlay: true,
}
);
这是导入语句
import { Audio } from 'expo-av';
我不知道它是否是由我在应用程序中用于音乐控制的反应本地音乐控制库引起的
进口式
import MusicControl from 'react-native-music-control'
在播放完音频后我马上叫它
MusicControl.setNowPlaying({
title: currentAudio.title,
artwork: currentAudio.imageUrl, // URL or RN's image require()
artist: currentAudio.artist,
genre: currentAudio.genre,
duration: (minutesToMilliseconds(currentAudio.playtime) / 1000), // (Seconds)
description: currentAudio.description, // Android Only
color: 0xffffff, // Android Only - Notification Color
colorized: true, // Android 8+ Only - Notification Color extracted from the artwork. Set to false to use the color property instead
isLiveStream: false, // iOS Only (Boolean), Show or hide Live Indicator instead of seekbar on lock screen for live streams. Default value is false.
})
拜托,我做错了什么,谢谢你的帮助
发布于 2022-11-18 17:24:36
我已经修好了
多么?
我认为是react-native-music-control
造成的,我在一个函数中配置了世博AV音频和react-native-music-control
,并在应用程序的一个主要文件中调用了React.useLayoutEffect中的函数
但是我发现,如果我改变了功能,音频就会被听到。
所以我做的是在调用Audio.Sound.createAsync(...)
之后调用这个函数
const {sound} = await Audio.Sound.createAsync(
{ uri: audioDetails.url, },
{
shouldPlay: true,
},
(status: AVPlaybackStatus) =>
onPlaybackStatusUpdate(...),
false
);
useAppGlobalContextIn.initializeMusicControl() // the function where I called the Expo AV Audio and the MusicControl setup
功能
const initializeMusicControl = React.useCallback(() => {
MusicControl.setCustomNotificationIcon(require('./assets/icon.png'))
MusicControl.enableBackgroundMode(true);
MusicControl.handleAudioInterruptions(true);
// // // Basic Controls
MusicControl.enableControl('play', true)
MusicControl.enableControl('pause', true)
MusicControl.enableControl('stop', true)
MusicControl.enableControl('nextTrack', true)
MusicControl.enableControl('previousTrack', true)
// // // Changing track position on lockscreen
MusicControl.enableControl('changePlaybackPosition', true)
// // Seeking
MusicControl.enableControl('seekForward', false) // iOS only
MusicControl.enableControl('seekBackward', false) // iOS only
MusicControl.enableControl('skipForward', false)
MusicControl.enableControl('skipBackward', false)
// // Android Specific Options
MusicControl.enableControl('seek', true) // Android only
MusicControl.enableControl('setRating', false)
MusicControl.enableControl('volume', true) // Only affected when remoteVolume is enabled
MusicControl.enableControl('remoteVolume', true)
MusicControl.enableControl('closeNotification', true, { when: 'always' })
// // // iOS Specific Options
MusicControl.enableControl('enableLanguageOption', false)
MusicControl.enableControl('disableLanguageOption', false)
Audio.setAudioModeAsync({
staysActiveInBackground: true,
shouldDuckAndroid: true,
interruptionModeIOS: 1,
interruptionModeAndroid: 1,
allowsRecordingIOS: true,
playsInSilentModeIOS: true,
})
}, [])
然后我就这样叫它
React.useLayoutEffect(() => {
initializeMusicControl()
}, [])
这有点棘手,但当我遇到关于世博AV音频的另一个问题时,我决定改用反应-本地-轨道-播放器,它工作得非常完美,它既处理了世博会AV音频和react-native-music-control
的功能,又提供了难以置信的事件来处理远程事件。
https://stackoverflow.com/questions/74207006
复制相似问题