電話にアプリをインストールし、ヘッドセットのボタンを押したときにコールバックが意図したとおりに実行されましたが、エミュレーターでは何もしません。
メディア ボタンの押下は、次のコードで生成されます。
adb shell input keyevent 126
興味深いことに、このコマンドで発信通話を停止できます。
Logcatの出力で、ボタンを押したログを見つけました:
I/Input: injectKeyEvent: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_PLAY, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=46647423, downTime=46647423, deviceId=-1, source=0x101 }
I/Input: injectKeyEvent: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_PLAY, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=46647423, downTime=46647423, deviceId=-1, source=0x101 }
MediaSession を作成するコード:
val callback = object : MediaSession.Callback() {
override fun onPlay() = pressCounter.press()
override fun onPause() = pressCounter.press()
override fun onStop() = pressCounter.press()
}
mediaSession = MediaSession(applicationContext, "MYMS")
mediaSession.setCallback(callback)
mediaSession.setPlaybackState(
PlaybackState.Builder().setActions(PlaybackState.ACTION_PLAY or
PlaybackState.ACTION_PAUSE or
PlaybackState.ACTION_PLAY_PAUSE)
.setState(PlaybackState.STATE_PLAYING,
0,
1f).build())
mediaSession.isActive = true