我开发了支持Apple CarPlay的音频流应用程序。如果iPhone被锁定,它可以正常工作,应用程序处于后台或活动状态。但我想从CarPlay播放音频,即使应用程序处于类似于Spotify应用程序的终止状态。我尝试了很多东西,但都无法实现这一点。所以请帮助我,并分享一些代码来审查。
smtd7mpg1#
import UIKitimport AVFoundation@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Configure your audio session do { try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay]) try AVAudioSession.sharedInstance().setActive(true) } catch { print("Error setting up audio session: \(error.localizedDescription)") } return true } func remoteControlReceived(with event: UIEvent?) { if let event = event { switch event.subtype { case .remoteControlPlay: // Handle play event break case .remoteControlPause: // Handle pause event break case .remoteControlTogglePlayPause: // Handle toggle play/pause event break case .remoteControlNextTrack: // Handle next track event break case .remoteControlPreviousTrack: // Handle previous track event break default: break } } } // Additional methods for handling background tasks var backgroundTask: UIBackgroundTaskIdentifier = .invalid func beginBackgroundTask() { backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "Background Audio", expirationHandler: { // Cleanup tasks when the background task expires UIApplication.shared.endBackgroundTask(self.backgroundTask) self.backgroundTask = .invalid }) } // Other methods...}
import UIKit
import AVFoundation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configure your audio session
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Error setting up audio session: \(error.localizedDescription)")
}
return true
func remoteControlReceived(with event: UIEvent?) {
if let event = event {
switch event.subtype {
case .remoteControlPlay:
// Handle play event
break
case .remoteControlPause:
// Handle pause event
case .remoteControlTogglePlayPause:
// Handle toggle play/pause event
case .remoteControlNextTrack:
// Handle next track event
case .remoteControlPreviousTrack:
// Handle previous track event
default:
// Additional methods for handling background tasks
var backgroundTask: UIBackgroundTaskIdentifier = .invalid
func beginBackgroundTask() {
backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "Background Audio", expirationHandler: {
// Cleanup tasks when the background task expires
UIApplication.shared.endBackgroundTask(self.backgroundTask)
self.backgroundTask = .invalid
})
// Other methods...
字符串
1条答案
按热度按时间smtd7mpg1#
字符串