Вот несколько способов обработки кнопок наушников в Android с использованием примеров кода:
-
Использование BroadcastReceiver:
// Create a BroadcastReceiver to capture button events private BroadcastReceiver buttonReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { // Handle button press event // Example: Pause or play music if (event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) { // Pause or play music } } } } }; // Register the BroadcastReceiver in your activity @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); registerReceiver(buttonReceiver, filter); } // Unregister the BroadcastReceiver in your activity's onDestroy or onPause method @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(buttonReceiver); } -
Использование AudioManager:
// Request audio focus in your activity AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { // Handle audio focus changes if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { // Stop playback } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { // Resume playback } } }; int result = audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); // Release audio focus when you're done audioManager.abandonAudioFocus(audioFocusChangeListener); -
Использование MediaSessionCompat:
// Create a MediaSessionCompat in your activity MediaSessionCompat mediaSession = new MediaSessionCompat(context, "tag"); // Set a MediaSessionCompat.Callback to handle button events mediaSession.setCallback(new MediaSessionCompat.Callback() { @Override public boolean onMediaButtonEvent(Intent mediaButtonIntent) { KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { // Handle button press event // Example: Next or previous track if (event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_NEXT) { // Play next track } else if (event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PREVIOUS) { // Play previous track } } return super.onMediaButtonEvent(mediaButtonIntent); } }); // Activate the MediaSessionCompat in your activity's onResume method @Override protected void onResume() { super.onResume(); mediaSession.setActive(true); } // Deactivate the MediaSessionCompat in your activity's onPause method @Override protected void onPause() { super.onPause(); mediaSession.setActive(false); }