osada-chan

Rails メインでサーバーサイドエンジニアしつつ現場監督やってます

MPRemoteCommandCenter で AirPods のイベントをハンドリングする

MPRemoteCommandCenter を使うと、ロック画面に出てくるメディアプレイヤーの操作イベントや、 AirPods などの連携している機器からのイベントをハンドリングすることができる。 (以前はもっと別なイベントをハンドリングしてたような気がするが忘れた)

なんでこんな話をしているかというと、以下の記事の続きだからである。

osadake212.hatenablog.com

使い方は簡単で、以下のようにイベントが発生した時の処理を実装できる。

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 していない。 なんと、上のコマンドをハンドリングしない場合は、ロック画面のシークバーが無効になった。(よくできてるなぁ、ということが言いたかった。)