Невозможно воспроизвести тот же элемент в Media RecyclerviewAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно воспроизвести тот же элемент в Media Recyclerview

Сообщение Anonymous »

У меня есть медиа-элементы в формате mp3, которые в recyclerview mp3 хранятся в необработанном виде. Все правильно, но когда я пытаюсь снова воспроизвести тот же предмет, он не воспроизводится. Вот как это происходит:
  • Воспроизвести любой элемент из recyclerview — он воспроизводится.
  • Остановить тот же элемент — он останавливается, но при остановке возникает некоторая проблема с состоянием mediaPlayer, для этого прикрепляются журналы.
    При нажатии на тот же элемент для воспроизведения - он не воспроизводится, для этого также прикрепляются журналы ошибок.< /li>
есть три метода, которые я вызываю при нажатии кнопки.

Код: Выделить всё

holder.musicPlay.setOnClickListener(v -> {
if (currentPlayingPosition == holder.getAdapterPosition()) {
// Toggle playback for the currently playing item
handleTogglePlayback(holder);
} else {
// Stop and release the previous MediaPlayer if it's not null
releaseMediaPlayer();

// Initialize a new MediaPlayer for the selected item
initializeMediaPlayer(holder, itemModel);
}
});

private void handleTogglePlayback(ViewHolder holder) {
if (mediaPlayer != null) {
try {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
holder.musicPlay.setImageResource(R.drawable.playbutton);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStop();
}
} else {
mediaPlayer.start();
holder.musicPlay.setImageResource(R.drawable.pause);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStart(list.get(holder.getAdapterPosition()).getMusicName(), mediaPlayer);
}
}
} catch (IllegalStateException e) {
Log.e("CategoryItemAdapter", "IllegalStateException: " + e.getMessage());
releaseMediaPlayer();
}
}
}

private void releaseMediaPlayer() {
if (mediaPlayer != null) {
try {
mediaPlayer.stop();
} catch (IllegalStateException e) {
Log.e("CategoryItemAdapter", "Error stopping MediaPlayer: " + e.getMessage());
} finally {
mediaPlayer.release();
mediaPlayer = null;
}
}
}

private void initializeMediaPlayer(ViewHolder holder, CategoryItemModel itemModel) {
try {
mediaPlayer = MediaPlayer.create(context, itemModel.getMusicSource());
if (mediaPlayer != null) {
mediaPlayer.setOnCompletionListener(mp -> {
holder.musicPlay.setImageResource(R.drawable.playbutton);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStop();
}
currentPlayingPosition = -1;
});

mediaPlayer.setOnErrorListener((mp, what, extra) -> {
Log.e("CategoryItemAdapter", "MediaPlayer error: " + what + ", " + extra);
return true;
});

mediaPlayer.start();
holder.musicPlay.setImageResource(R.drawable.pause);

if (onMusicEventListener != null) {
onMusicEventListener.onMusicStart(itemModel.getMusicName(), mediaPlayer);
}

if (currentPlayingViewHolder != null) {
currentPlayingViewHolder.musicPlay.setImageResource(R.drawable.playbutton);
}

currentPlayingViewHolder = holder;
currentPlayingPosition = holder.getAdapterPosition();
}
} catch (Exception e) {
Log.e("CategoryItemAdapter", "Error initializing MediaPlayer: "  + e.getMessage());
releaseMediaPlayer();
}
}
при остановке воспроизведения элемента из musicPlay я получаю следующие журналы

Код: Выделить всё

MediaPlayer            W  mediaplayer went away with unhandled events
chatty                 I  uid=10310(com.app.sleepy) identical 1 line
MediaPlayer            W  mediaplayer went away with unhandled events
при нажатии кнопки «Воспроизвести музыку», чтобы снова воспроизвести этот элемент, я не могу воспроизвести тот же элемент снова, и появляются эти ошибки

Код: Выделить всё

CategoryItemAdapter     E  IllegalStateException: null
CategoryItemAdapter     E  Error stopping MediaPlayer: null
MediaPlayer             V  resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
MediaPlayer             V  cleanDrmObj: mDrmObj=null mDrmSessionId=null
Я попробовал это для сброса состояния медиаплеера, но у меня это не сработало. подскажите пожалуйста решение этой проблемы.

Код: Выделить всё

mediaPlayer.reset()
до

Код: Выделить всё

mediaPlayer.release()
но здесь произошла ошибка

Подробнее здесь: https://stackoverflow.com/questions/788 ... cyclerview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»