При разработке Android обычно используются медиаплееры, воспроизводящие аудио- или видеофайлы. Часто нам необходимо выполнить определенные действия или отобразить уведомления, когда медиаплеер завершит воспроизведение. В этой статье мы рассмотрим пять простых способов определить, когда медиаплеер закончил воспроизведение на Android. Мы предоставим примеры кода и объясним каждый метод в разговорной речи.
- Использование OnCompletionListener:
Самый простой способ определить, когда медиаплеер заканчивает воспроизведение, — использовать методsetOnCompletionListener
. Этот метод позволяет зарегистрировать прослушиватель, который будет вызываться после завершения воспроизведения. Вот пример:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// Perform actions or show notifications here
}
});
- Использование широковещательных приемников.
Другой подход — использовать широковещательные приемники для прослушивания намерения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);
- Использование 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);
- Использование MediaPlayer.OnInfoListener:
ИнтерфейсMediaPlayer.OnInfoListener
предоставляет методonInfo
, который можно использовать для обработки различных информационных событий, включая завершение воспроизведения. Вы можете проверить, равен ли параметрwhat
MediaPlayer.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;
}
});
- Использование таймера.
Если у вас нет доступа к событиям завершения работы медиаплеера, вы можете использовать таймер, чтобы периодически проверять, работает ли медиаплеер. Если он не воспроизводится, можно считать, что воспроизведение завершено. Вот пример:
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 и сделать его более удобным для пользователей.