SwiftUIでコントロールセンターに再生中の音声のタイトルやアルバム名を表示する方法を説明する。
結論
MPNowPlayingInfoCenterを設定する。
具体例
コントロールセンターに再生中の音声のタイトルやアルバム名を表示するAppを作成する。
App起動時の画面
ボタンをタップすると音声が再生される。コントロールセンターを表示させるとタイトルとアルバム名が表示される。
コード
- タイトルやアルバム名を設定するためにMPNowPlayingInfoCenterを設定する関数を定義する。
- ボタンをタップすると1の関数を実行するようにする。
- 再生/停止/スキップの制御をできるようにMPRemoteCommandCenterを設定するためのclassを定義する。1を動作させるためには3も設定する必要がある。
- 3を使ってプレイヤーを定義する。3,4については別の記事を参照。
import SwiftUI
import AVFoundation
import MediaPlayer
struct ContentView: View {
var body: some View {
let プレイヤークラス = playerClass() // ? 4
Button("音声を再生") {
プレイヤークラス.プレイヤー.play()
}
.buttonStyle(.borderedProminent)
}
}
class playerClass { // ? 3
var プレイヤー: AVAudioPlayer
init() {
let ファイルURL = Bundle.main.url(forResource: "sample",
withExtension: "mp3")!
プレイヤー = try! AVAudioPlayer(contentsOf: ファイルURL)
setNowPlayingInfo() // ? 2
setMPRemoteCommandCenter()
}
func setNowPlayingInfo() { // ? 1
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "タイトル"
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = "アルバム"
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
func setMPRemoteCommandCenter() {
// Get the shared command center.
let commandCenter = MPRemoteCommandCenter.shared()
// 再生/停止/次に進む/前に戻るコマンド
commandCenter.playCommand.addTarget { [unowned self] event in
print("play")
プレイヤー.play()
return .success
}
commandCenter.pauseCommand.addTarget { [unowned self] event in
print("pause")
プレイヤー.pause()
return .success
}
commandCenter.nextTrackCommand.addTarget{ [unowned self] event in
print("next")
// ここに次の曲に進む処理を記述
return .success
}
commandCenter.previousTrackCommand.addTarget{ [unowned self] event in
print("previous")
// ここに前の曲に戻る処理を記述
return .success
}
}
}
まとめ
SwiftUIでコントロールセンターに再生中の音声のタイトルやアルバム名を表示する方法を説明した。
コメント