Обработка кнопок наушников в Android: примеры кода и методы

Вот несколько способов обработки кнопок наушников в Android с использованием примеров кода:

  1. Использование 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);
    }
  2. Использование 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);
  3. Использование 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);
    }