بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در پخش MediaPlayer در recyclerview
سلام دوستان خسته نباشید من یک recyclerview دارم که یک سری فایل صوتی میگیره و پخش میکنه گه عکسش رو براتون گذاشتم.

حالا مشکل من اینه که اگه یک موزیک در حال پخش باشه و من یک موزیک دیگه پلی کنم اون قبلیه قطع نمیشه و هر دو با هم پخش میشن. من کد ها رو میزارم ممنون میشم کمک کنید.
public class AdapterSong extends RecyclerView.Adapter<AdapterSong.viewHolder> {
Context context;
List<ModelSong> model;
String url_audio;
MediaPlayer mediaplayer;
public AdapterSong(Context context, List<ModelSong> model) {
this.context = context;
this.model = model;
}
@NonNull
@Override
public AdapterSong.viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rec_song, parent, false);
return new AdapterSong.viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final AdapterSong.viewHolder holder, int position) {
final ModelSong data = model.get(position);
holder.tittle.setText(data.getTittle());
holder.stop.setVisibility(View.GONE);
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
url_audio = "http://kanoonmedia.ir/files/sorod/" + data.getFile();
mediaplayer = new MediaPlayer();
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaplayer.setDataSource(url_audio);
mediaplayer.setLooping(true);
mediaplayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
holder.play.setVisibility(View.GONE);
holder.stop.setVisibility(View.VISIBLE);
mediaplayer.start();
}
});
holder.stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.play.setVisibility(View.VISIBLE);
holder.stop.setVisibility(View.GONE);
mediaplayer.stop();
}
});
}
@Override
public int getItemCount() {
return model.size();
}
public class viewHolder extends RecyclerView.ViewHolder {
TextView tittle;
CircleImageView play, stop;
public viewHolder(View itemView) {
super(itemView);
tittle = itemView.findViewById(R.id.txt_tittle_song);
play = itemView.findViewById(R.id.img_play_song);
stop = itemView.findViewById(R.id.img_stop_song);
}
}
}
+2
0
شما برای هر آیتم دارید یک پلیر جدید میسازید (new MediaPlayer)! بهتره یدونه توی اکتیوتی بسازید و همون یدونه رو توی اداپتر استفاده کنید و قبل از start کردن اون رو stop کنید و همچنین بهتره start کردن پلیر رو هم توی ترد انجام بدید که ترد Main رو درگیر نکنه و باعث کرش در شرایط خاص نشه ! (6 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .