ios 如何使用Swift在后台播放音频?

zsohkypk  于 2023-10-21  发布在  iOS
关注(0)|答案(5)|浏览(164)

如你所见,我正在播放音频广播。但是当我按下Home键并退出应用程序时,流媒体停止或我听不到。如何在后台继续播放并从锁定屏幕收听?
ViewController.Swift

  1. import UIKit
  2. import AVFoundation
  3. import MediaPlayer
  4. import GoogleMobileAds
  5. class ViewController: UIViewController, GADInterstitialDelegate {
  6. @IBOutlet weak var exitMapButton: UIButton!
  7. @IBOutlet weak var radarMap: UIWebView!
  8. var interstitial: GADInterstitial!
  9. func createAndLoadInterstitial() -> GADInterstitial {
  10. var interstitial = GADInterstitial(adUnitID: "adUnitID-XXXX")
  11. interstitial.delegate = self
  12. interstitial.loadRequest(GADRequest())
  13. return interstitial
  14. }
  15. func getAd(){
  16. if (self.interstitial.isReady)
  17. {
  18. self.interstitial.presentFromRootViewController(self)
  19. self.interstitial = self.createAndLoadInterstitial()
  20. }
  21. }
  22. @IBOutlet weak var ataturkButton: UIButton!
  23. @IBOutlet weak var sabihaButton: UIButton!
  24. @IBOutlet weak var esenbogaButton: UIButton!
  25. @IBOutlet weak var weatherButton: UIButton!
  26. @IBOutlet weak var statusLabel: UILabel!
  27. @IBOutlet weak var playButton: UIButton!
  28. @IBOutlet weak var webViewButton: UIButton!
  29. var googleBannerView: GADBannerView!
  30. override func viewDidLoad() {
  31. super.viewDidLoad()
  32. }
  33. class PlayerAv {
  34. var audioLink: String?
  35. var player: AVPlayer
  36. init(link: String) {
  37. self.audioLink = link
  38. self.player = AVPlayer(URL: NSURL(string: link))
  39. }
  40. }
  41. var myPlayer = PlayerAv(link: "http://somewebsite.com/abc.pls")
  42. var setTowerState = ""
  43. @IBAction func sliderValueChanged(sender: UISlider) {
  44. var currentValue = Float(sender.value)
  45. println(currentValue)
  46. myPlayer.player.volume = currentValue
  47. }
  48. @IBAction func getWeatherWindow(sender: AnyObject) {
  49. UIApplication.sharedApplication().openURL(NSURL(string: "http://somewebpage.com")!)
  50. println("Directed to weather page")
  51. }
  52. @IBAction func changeToAtaturk() {
  53. myPlayer.player.pause()
  54. myPlayer = PlayerAv(link: "http://somewebsite.com/abc.pls")
  55. myPlayer.audioLink == ""
  56. println("\(myPlayer.audioLink!)--a")
  57. playButton.setTitle("Pause", forState: UIControlState.Normal)
  58. myPlayer.player.play()
  59. setTowerState = "ataturk"
  60. statusLabel.text = "Status: Playing, LTBA"
  61. }
  62. @IBAction func changeToEsenboga() {
  63. myPlayer.player.pause()
  64. myPlayer = PlayerAv(link: "http://somewebsite.com/def.pls")
  65. println("\(myPlayer.audioLink!)--a")
  66. playButton.setTitle("Pause", forState: UIControlState.Normal)
  67. myPlayer.player.play()
  68. setTowerState = "esenboga"
  69. statusLabel.text = "Status: Playing, LTAC"
  70. }
  71. @IBAction func changeToSabiha() {
  72. myPlayer.player.pause()
  73. myPlayer = PlayerAv(link: "http://somewebsite.com/efg.pls")
  74. println("\(myPlayer.audioLink!)--a")
  75. playButton.setTitle("Pause", forState: UIControlState.Normal)
  76. myPlayer.player.play()
  77. setTowerState = "sabiha"
  78. statusLabel.text = "Status: Playing, LTFJ"
  79. }
  80. override func didReceiveMemoryWarning() {
  81. super.didReceiveMemoryWarning()
  82. // Dispose of any resources that can be recreated.
  83. }
  84. @IBAction func playButtonPressed(sender: AnyObject) {
  85. toggle()
  86. }
  87. func toggle() {
  88. if playButton.titleLabel?.text == "Play" {
  89. playRadio()
  90. println("Playing")
  91. statusLabel.text = "Status: Playing"
  92. } else {
  93. pauseRadio()
  94. println("Paused")
  95. statusLabel.text = "Status: Paused"
  96. }
  97. }
  98. func playRadio() {
  99. myPlayer.player.play()
  100. playButton.setTitle("Pause", forState: UIControlState.Normal)
  101. }
  102. func pauseRadio() {
  103. myPlayer.player.pause()
  104. playButton.setTitle("Play", forState: UIControlState.Normal)
  105. }
  106. }
webghufk

webghufk1#

您需要设置应用功能背景模式(音频和AirPlay),并将AVAudioSession类别设置为AVAudioSessionCategoryPlayback并将其设置为活动状态

来自Xcode 11.4 · Swift 5.2

  1. do {
  2. try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
  3. print("Playback OK")
  4. try AVAudioSession.sharedInstance().setActive(true)
  5. print("Session is Active")
  6. } catch {
  7. print(error)
  8. }

xeufq47z

xeufq47z2#

Xcode 10.2.1*Swift 4

请在您的AppDelegate中添加以下代码

  1. func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
  2. do {
  3. try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [.mixWithOthers, .allowAirPlay])
  4. print("Playback OK")
  5. try AVAudioSession.sharedInstance().setActive(true)
  6. print("Session is Active")
  7. } catch {
  8. print(error)
  9. }
  10. return true
  11. }

**注意:-**请根据需要配置 * 选项 *。例如,要在播放视频文件时停止背景音频,

  1. options: [.allowAirPlay, .defaultToSpeaker]

不要忘记在背景模式下启用音频和airplay x1c 0d1x

展开查看全部
mlnl4t2r

mlnl4t2r3#

仅粘贴视图Didload

  1. let path = Bundle.main.path(forResource:"Bismallah", ofType: "mp3")
  2. do{
  3. try playerr = AVAudioPlayer(contentsOf: URL(fileURLWithPath: path!))
  4. } catch {
  5. print("File is not Loaded")
  6. }
  7. let session = AVAudioSession.sharedInstance()
  8. do{
  9. try session.setCategory(AVAudioSessionCategoryPlayback)
  10. }
  11. catch{
  12. }
  13. player.play()
展开查看全部
jc3wubiy

jc3wubiy4#

Swift 5 Xcode 11.2.1
在初始化AudioPlayer的地方添加此代码。

  1. audioPlayer.delegate = self
  2. audioPlayer.prepareToPlay()
  3. let audioSession = AVAudioSession.sharedInstance()
  4. do{
  5. try audioSession.setCategory(AVAudioSession.Category.playback)
  6. }
  7. catch{
  8. fatalError("playback failed")
  9. }
jgzswidk

jgzswidk5#

解决方案:
第一步:更新Info.plist

在您的Info.plist文件中,您正在为您的应用程序定义所需的后台模式。这些模式指示您的应用打算如何使用后台处理。

  1. <array>
  2. <string>audio</string>
  3. <string>video</string>
  4. </array>

*第二步: AppDelegate.m**更新

在AppDelegate.m文件中,您正在将音频会话配置为使用AVAudioSessionCategoryPlayback类别。此步骤对于确保音频播放在后台继续至关重要。

  1. #import <AVFoundation/AVFoundation.h> // Import AVFoundation
  2. NSError *setCategoryError = nil;
  3. BOOL success = [[AVAudioSession sharedInstance]
  4. setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
  5. if (!success) {
  6. NSLog(@"Error setting audio session category: %@", setCategoryError);
  7. }
展开查看全部

相关问题