gpt4 book ai didi

swift - 应用程序在设置 MPNowPlayingInfoCenter 时丢失远程控制输入

转载 作者:行者123 更新时间:2023-11-28 08:59:30 24 4
gpt4 key购买 nike

根据其他一些帖子,我成功地获得了音乐播放器的一切权利。

最后一步是设置 MPNowPlayingInfoCenter 值。

不幸的是,一旦我这样做,应用程序就失去了接收 remoteControlEvents 的能力,如果我在任何其他 View Controller 而不是设置属性的 View Controller 中。将应用程序从“音乐 VC”以外的任何其他 VC 置于后台(它是一个选项卡式应用程序,音乐只是一个选项卡)

我的 AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

//here is other stuff for push-notifications etc.

UIApplication.sharedApplication().beginReceivingRemoteControlEvents()

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)

return true
}

音乐风投:

class MusicVC:UIViewController, UITableViewDelegate,UITableViewDataSource,UICollectionViewDataSource, UICollectionViewDelegate {

var myPlayer:AVQueuePlayer!

override func viewDidLoad() {
super.viewDidLoad()

//tableView and other setup

self.becomeFirstResponder()

}

//MARK: - InfoCenter Methods
func setMediaCenterInfo() {

let mpic = MPNowPlayingInfoCenter.defaultCenter()

var albumArtWork = MPMediaItemArtwork(image: UIImage(named:"testImage"))

var fullString = self.currentSong.title as String
var splitArray = fullString.componentsSeparatedByString(" - ")
var artistName: String = splitArray[0]
var titleString: String? = splitArray.count > 1 ? splitArray[1] : nil

if titleString != nil {

mpic.nowPlayingInfo =
[
MPMediaItemPropertyArtwork:albumArtWork,
MPMediaItemPropertyTitle:titleString!,
MPMediaItemPropertyArtist:artistName
]
} else {
mpic.nowPlayingInfo =
[
MPMediaItemPropertyArtwork:albumArtWork,
MPMediaItemPropertyTitle:fullString
]
}

//Does get set correctly and shows in Info Center as well as Lock-Screen

}

override func canBecomeFirstResponder() -> Bool {
return true
}

override func remoteControlReceivedWithEvent(event: UIEvent) {

if event.type == UIEventType.RemoteControl {

switch event.subtype {

case .RemoteControlTogglePlayPause:
println("TOGGLE PLAY PAUSE")
//self.playToggleTapped(self)

case .RemoteControlPlay:
println("ONLY PLAY BUTTON")
//self.playToggleTapped(self)

case .RemoteControlPause:
println("ONLY PAUSE BUTTON")
//self.playToggleTapped(self)

case .RemoteControlNextTrack:
println("next")
//self.nexButtonTapped(self)

case .RemoteControlPreviousTrack:
//self.previousButtonTapped(self)
println("previous")

default:
break
}

}

}

}

当显示另一个 VC 时,FirstResponder 是否会自动更改?感谢您提供修复此问题的提示。

最佳答案

如果您仍然有兴趣找到一种方法来做到这一点。

您可以创建一个类来为您的 AudioPlayer 设置单例。在此 AudioPlayer 类中,您将设置 MPNowPlayingInfoCenter 值和 UIApplication.sharedApplication().beginReceivingRemoteControlEvents()。

然后从“启动”您的播放器的 viewController 和所有在 MPNowPlayingInfoCenter 值之后显示的 viewController 将继续显示在前景和背景 View 中。如果您将“之前”( View 层次结构)的 viewController 称为“音频启动”viewController,则音频将继续播放(前景和背景),但您来自 MPNowPlayingInfoCenter 的数据将不会显示。

要让它在整个应用程序中传播,您可能必须在“音频启动”发生时向 AppDelegate(NSNotifcation.addObserver..) 发布通知(在您的 AudioPlayer 中),然后在AppDelegate 中的函数。我现在正在这样做,所以如果您仍在寻找解决方案,请告诉我。谢谢

关于swift - 应用程序在设置 MPNowPlayingInfoCenter 时丢失远程控制输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com