Как остановить музыку при выходе из экрана?
у меня есть список воспроизведения listview с mediaplayer в musicAdapter.каждый элемент из списка имеет воспроизведение/паузу и остановку btn.когда вы нажимаете кнопку воспроизведения, она меняется на паузу и другой способ.stop btn останавливает музыку и меняет кнопку паузы на воспроизведение.
Это мой musicAdapter:
<pre lang="java">package com.example.android.musicapp; import android.content.Context; import android.media.MediaPlayer; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; public class MusicAdapter extends BaseAdapter { private Context context; private int layout; private int currentPosition; private ArrayList arrayList; private MediaPlayer mediaPlayer; private boolean flag = true; private ImageView currentPlayingButton; public MusicAdapter(Context context, int layout, ArrayList<Music> arrayList) { this.context = context; this.layout = layout; this.arrayList = arrayList; } @Override public int getCount() { return arrayList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } private class Holder { TextView textName, textAlbum; ImageView play, stop; } @Override public View getView(final int pos, View convertView, final ViewGroup parent) { final Holder holder; final int position = pos; if (convertView == null) { holder = new Holder(); LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = layoutInflater.inflate(layout, null); holder.textName = (TextView) convertView.findViewById(R.id.textName); holder.textAlbum = (TextView) convertView.findViewById(R.id.textAlbum); holder.play = convertView.findViewById(R.id.play); holder.stop = convertView.findViewById(R.id.stop); currentPlayingButton = holder.play; convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } final Music music = (Music) arrayList.get(position); holder.textName.setText(music.getName()); holder.textAlbum.setText(music.getAlbum()); holder.play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer == null) { mediaPlayer = MediaPlayer.create(context, music.getSong()); mediaPlayer.start(); currentPosition = position; holder.play.setImageResource(R.drawable.pause); currentPlayingButton = holder.play; } else { if (currentPosition != position) { mediaPlayer.reset(); mediaPlayer.release(); currentPlayingButton.setImageResource(R.drawable.ic_play); currentPlayingButton = holder.play; mediaPlayer = MediaPlayer.create(context, music.getSong()); mediaPlayer.start(); currentPlayingButton.setImageResource(R.drawable.pause); currentPlayingButton = holder.play; currentPosition = position; } else { if (mediaPlayer.isPlaying()) { Log.v("Adapter", "mediaPlayer should be playing here" + mediaPlayer.isPlaying()); mediaPlayer.pause(); holder.play.setImageResource(R.drawable.ic_play); Log.v("Adapter", "user clicked the same row and isPlaying"); Log.v("Adapter", "" + currentPosition); Log.v("Adapter", "mediaPlayer shouldn't be playing here" + mediaPlayer.isPlaying()); } else { Log.v("Adapter", "mediaPlayer shouldn't be playing here" + mediaPlayer.isPlaying()); mediaPlayer.start(); holder.play.setImageResource(R.drawable.pause); Log.v("Adapter", "current pos == pos and !isPlaying"); Log.v("Adapter", "" + currentPosition); Log.v("Adapter", "mediaPlayer should be playing here" + mediaPlayer.isPlaying()); } } } } }); holder.stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; holder.play.setImageResource(R.drawable.ic_play); } } }); return convertView; } { }}
у меня есть 2 проблемы:1) я установил свою кнопку воспроизведения/паузы, чтобы она также менялась при нажатии другой кнопки воспроизведения btn из другой позиции.Это работает только в том случае,что помимо позиции 6,7 и 8, независимо от того, на какой позиции вы нажимаете кнопку воспроизведения, появляется еще одна игра btn из другой позиции с возможностью паузы, хотя музыка остается той, на которую мы нажали, и 2) я, кажется, не понимаю, как остановить воспроизведение музыки, когда нажата кнопка Назад или домой или меняется экран.
Что я уже пробовал:
для остановки музыки при смене экранов и т. д. Я пробовал:
public void stopMusic() { if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; holder.play.setImageResource(R.drawable.ic_play); } }
я положил его в свой держатель.stop.setOnClickListener(...)
David Crow
Что касается вашей первой проблемы, то вы могли бы попробовать следующее:
// in the getView() method: holder.play.setTag(Integer.valueOf(position)); // in the onClick() method: Integer pos = (Integer) v.getTag(); Music music = arrayList.get(pos.intValue());Другой вариант может быть:
// in the getView() method: holder.play.setTag(music); // in the onClick() method: Music music = (Music) v.getTag();"...я, кажется, не понимаю, как остановить воспроизведение музыки, когда нажата кнопка "Назад" или "домой" или меняется экран."
Ты звонишь
mediaPlayer.stop()
в методе деятельности, таком как onPause()
, onStop()
, или onDestroy()
?
Member 13772817
i не работает в обоих случаях ошибка "несовместимые типы"
Member 13772817
я попробовал это сделать*
public void stopMusic() {
if(mediaPlayer != null){
медиаплеер.стоп();
медиаплеер.релиз();
mediaPlayer = null;
holder.play.setImageResource(R. drawable.ic_play);
}
}
*в holder.stop.setOnClickListener не работает и это*
общественного недействительными вызовом onStop() {
if(mediaPlayer != null){
медиаплеер.стоп();
медиаплеер.релиз();
mediaPlayer = null;
}
}
*последнее в моем коде не сработало.я прочитал почти все об этом.и посмотрел другие ответы,но все, что я пытаюсь, не работает