Пять простых способов определить, когда медиаплеер заканчивает воспроизведение на Android

При разработке Android обычно используются медиаплееры, воспроизводящие аудио- или видеофайлы. Часто нам необходимо выполнить определенные действия или отобразить уведомления, когда медиаплеер завершит воспроизведение. В этой статье мы рассмотрим пять простых способов определить, когда медиаплеер закончил воспроизведение на Android. Мы предоставим примеры кода и объясним каждый метод в разговорной речи.

  1. Использование OnCompletionListener:
    Самый простой способ определить, когда медиаплеер заканчивает воспроизведение, — использовать метод setOnCompletionListener. Этот метод позволяет зарегистрировать прослушиватель, который будет вызываться после завершения воспроизведения. Вот пример:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // Perform actions or show notifications here
    }
});
  1. Использование широковещательных приемников.
    Другой подход — использовать широковещательные приемники для прослушивания намерения ACTION_AUDIO_BECOMING_NOISY, которое передается, когда воспроизведение звука вот-вот остановится. Вы можете зарегистрировать широковещательный приемник в своем коде или в файле манифеста. Вот пример программной регистрации приемника:
private BroadcastReceiver audioNoisyReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Perform actions or show notifications here
    }
};
// Register the receiver
IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
registerReceiver(audioNoisyReceiver, intentFilter);
  1. Использование MediaSessionCompat:
    Если вы используете класс MediaSessionCompat, вы можете воспользоваться его методами обратного вызова, чтобы определить момент завершения воспроизведения. Метод onPlaybackStateChangedвызывается с состоянием PlaybackStateCompat.STATE_STOPPED, когда воспроизведение мультимедиа завершается. Вот пример:
MediaSessionCompat.Callback mediaSessionCallback = new MediaSessionCompat.Callback() {
    @Override
    public void onPlaybackStateChanged(PlaybackStateCompat state) {
        if (state.getState() == PlaybackStateCompat.STATE_STOPPED) {
            // Perform actions or show notifications here
        }
    }
};
// Set the callback on your media session
mediaSession.setCallback(mediaSessionCallback);
  1. Использование MediaPlayer.OnInfoListener:
    Интерфейс MediaPlayer.OnInfoListenerпредоставляет метод onInfo, который можно использовать для обработки различных информационных событий, включая завершение воспроизведения. Вы можете проверить, равен ли параметр whatMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_STARTили MediaPlayer.MEDIA_INFO_PLAYBACK_COMPLETE. Вот пример:
mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (what == MediaPlayer.MEDIA_INFO_PLAYBACK_COMPLETE) {
            // Perform actions or show notifications here
        }
        return true;
    }
});
  1. Использование таймера.
    Если у вас нет доступа к событиям завершения работы медиаплеера, вы можете использовать таймер, чтобы периодически проверять, работает ли медиаплеер. Если он не воспроизводится, можно считать, что воспроизведение завершено. Вот пример:
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (!mediaPlayer.isPlaying()) {
                    // Perform actions or show notifications here
                    timer.cancel();
                }
            }
        });
    }
};
// Start the timer
timer.schedule(timerTask, 0, 1000);

В этой статье мы рассмотрели пять простых способов определить, когда медиаплеер заканчивает воспроизведение в Android. Мы обсуждали использование прослушивателей, таких как OnCompletionListenerи OnInfoListener, приемников вещания, MediaSessionCompat и даже подхода на основе таймера. Каждый метод имеет свои преимущества, поэтому выберите тот, который соответствует вашим конкретным требованиям. Внедрив эти методы, вы сможете расширить функциональность своего приложения для Android и сделать его более удобным для пользователей.