MPRemoteCommandCenter で AirPods のイベントをハンドリングする
MPRemoteCommandCenter を使うと、ロック画面に出てくるメディアプレイヤーの操作イベントや、 AirPods などの連携している機器からのイベントをハンドリングすることができる。 (以前はもっと別なイベントをハンドリングしてたような気がするが忘れた)
なんでこんな話をしているかというと、以下の記事の続きだからである。
使い方は簡単で、以下のようにイベントが発生した時の処理を実装できる。
let commandCenter = MPRemoteCommandCenter.shared() // Play commandCenter.playCommand.addTarget { (_: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in // TODO: do something return .success }
この例では再生イベントをハンドリングしているが、ハンドリングできるイベントは以下のドキュメントにまとまっている。
https://developer.apple.com/documentation/mediaplayer/mpremotecommandcenter
iPhone のロック画面のイベントは名前でなんとなく対応がつくのだが、 AirPods などの機器からどういうイベントが飛んでくるのかは、試して確認したほうがよさそうである。
ちなみに、 MAPlayer ではシークバーのイベントをハンドリングしようとしたのだが、実装上の諸事情により changePlaybackPositionCommand に対して addTarget していない。 なんと、上のコマンドをハンドリングしない場合は、ロック画面のシークバーが無効になった。(よくできてるなぁ、ということが言いたかった。)