Кнопки управления наушниками Android 5.0
Я пишу программу, которая ловит нажатия кнопок наушников, а затем выполняет разные действия в зависимости от того, как долго и сколько раз вы нажимаете на нее. Собираемся для API уровня 21. Android 5.0. Так что я могу поймать нажатие кнопки, но при запуске mp3-плеера он начинает ловить нажатия кнопки. Как я могу предотвратить это? Второй вопрос, как вы возобновляете приостановленную mp3, ее и другие программы, а не мою программу воспроизведения mp3.
audioSession = new MediaSession(getApplicationContext(), "TAG11");
MsCallback= new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
String intentAction = mediaButtonIntent.getAction();
Log.i("onMediaButtonEvent", intentAction );
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event != null) {
if(toast!=null){
toast.cancel();
}
toast = Toast.makeText(getApplicationContext(), "headsetbutton press", Toast.LENGTH_SHORT);
toast.show();
}
}
return super.onMediaButtonEvent(mediaButtonIntent);
}
};
audioSession.setCallback(MsCallback);
PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY_PAUSE)
.setState(PlaybackState.STATE_PLAYING, 0, 0, 0)
.build();
audioSession.setPlaybackState(state);
audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
audioSession.setActive(true);
1 ответ
Для прослушивания событий медиа-ключа объявите в вашем файле манифеста трансляцию
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
В RemoteControlReceiver
расширение класса BroadcastReceiver
и извлечь ключевое событие и код ключа, как это
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: ");
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
int keyCode = event.getKeyCode();
}
}
Основной кнопкой на каждой гарнитуре обычно является кнопка паузы / воспроизведения.