#swift #xcode #audio #background #swiftui
#swift #xcode #Аудио #фон #swiftui
Вопрос:
Я создаю приложение для потокового аудио. Я уже создал аудиоплеер, получающий данные из firestore в виде отображаемого листа, но когда он исчезает, звук прекращается. Я ищу решение, как включить его прослушивание во время использования приложения, даже если пользователь закрывает лист аудиоплеера.
Вот код предстоящего листа:
struct PodcastPlayerView : View {
@State var album : Album
@State var song : Song
@State var player = AVPlayer()
@State var isPlaying : Bool = false
var body: some View{
ZStack{
Color.white
VStack{
Image(song.image)
.resizable()
.frame(width: 350, height: 350, alignment: .center)
.cornerRadius(15)
.shadow(radius: 20)
.padding(30)
Text(song.songName)
.font(.system(size: 25, weight: .semibold))
.multilineTextAlignment(.center)
Text(song.artist)
.font(.system(size: 20, weight: .regular))
.multilineTextAlignment(.center)
Spacer()
AudioPlayerControlsView2(player: player,
timeObserver2: PlayerTimeObserver2(player: player),
durationObserver2: PlayerDurationObserver2(player: player),
itemObserver2: PlayerItemObserver2(player: player))
Spacer()
HStack{
Spacer()
Button(action: self.previous, label: {
Image(systemName: "backward.end.fill")
.resizable()
}).frame(width: 50, height: 50, alignment: .center).foregroundColor(Color(.black))
Spacer()
Button(action: self.playPause, label: {
Image(systemName: isPlaying ? "pause.circle.fill" : "play.circle.fill")
.resizable()
}).frame(width: 55, height: 55, alignment: .center).foregroundColor(Color(.black))
Spacer()
Button(action: self.next, label: {
Image(systemName: "forward.end.fill")
.resizable()
}).frame(width: 50, height: 50, alignment: .center).foregroundColor(Color(.black))
Spacer()
}
Spacer()
}.onAppear(){
playSong()
}
}
}
func playSong(){
let storage = Storage.storage().reference(forURL: self.song.file)
storage.downloadURL { (url, error) in
if error != nil {
print(error!)
}else{
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
try AVAudioSession.sharedInstance().setActive(true)
}
catch{
// report for an error
}
player = AVPlayer(playerItem: AVPlayerItem(url: url!))
player.play()
}
}
}