IOS 11では、iPhoneをロックすると、音楽アプリにロック画面のコントロールが表示されました。現在再生中の曲を確認し、前後にスキップして再生/一時停止できました。ただし、Xcode 10/iOS 12にアップグレードすると、日付と時刻だけがロック画面のコントロールに表示されなくなります...
ただし、上にスワイプしてそのウィジェット画面(機内モードなどをオンにできる場所)を取得すると、現在再生中の情報を表示できます。
これが私が持っているものです
バックグラウンドモード
コードを次のように更新しました。
私のviewDidLoad
で呼び出されました
do {
try AVAudioSession.sharedInstance().setCategory(.soloAmbient, mode: .default, options: .allowAirPlay)
print("Playback OK")
try AVAudioSession.sharedInstance().setActive(true)
print("Session is Active")
} catch {
print(error)
}
UIApplication.shared.beginReceivingRemoteControlEvents()
self.becomeFirstResponder()
私は以前に最後の作業バージョンに次のコードを持っていませんでしたが、それを行うことを示唆する同様の投稿を見つけたので、それを追加しました
if let songInfo = self.mediaPlayer.nowPlayingItem {
nowPlayingInfoCenter.nowPlayingInfo = [
MPMediaItemPropertyTitle: songInfo.title ?? "",
MPMediaItemPropertyArtist: songInfo.artist ?? "",
MPMediaItemPropertyArtwork : songInfo.artwork?.image(at: CGSize(width: 400, height: 400)) ?? #imageLiteral(resourceName: "emptyArtworkImage")]
}
ブレークポイントをdo try
どちらの印刷関数も印刷せず、try
をスキップします
コードを間違って変換しましたか?
MPRemoteCommandCenter
の設定を忘れないでください:
import MediaPlayer
//Use an AVPlayer
var player: AVPlayer!
var playerItem: AVPlayerItem!
viewDidLoad
にAVPlayerを設定できます
override func viewDidLoad() {
super.viewDidLoad()
let path = Bundle.main.path(forResource: "My Heart Will Go On", ofType:"mp3")!
let url = URL(fileURLWithPath: path)
playerItem = AVPlayerItem(url: url)
player = AVPlayer(playerItem: playerItem)
setupAudioSession()
}
オーディオセッションを次のように設定します。
func setupAudioSession() {
do {
try AVAudioSession.sharedInstance().setCategory(.soloAmbient, mode: .default, options: .allowAirPlay)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Error setting the AVAudioSession:", error.localizedDescription)
}
}
音声ファイルを再生する
func play() {
player.play()
setupNowPlaying()
setupRemoteCommandCenter()
}
MPNowPlayingInfoCenter
を設定します(これをコードに合わせてカスタマイズしてください):
func setupNowPlaying() {
// Define Now Playing Info
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "My Song"
nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = playerItem.currentTime().seconds
nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = playerItem.asset.duration.seconds
nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate
// Set the metadata
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
MPNowPlayingInfoCenter.default().playbackState = .playing
}
そして MPRemoteCommandCenter
:
func setupRemoteCommandCenter() {
let commandCenter = MPRemoteCommandCenter.shared();
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.addTarget {event in
self.player.play()
return .success
}
commandCenter.pauseCommand.isEnabled = true
commandCenter.pauseCommand.addTarget {event in
self.player.pause()
return .success
}
}