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

مشکل در پخش MediaPlayer در recyclerview

فرهاد  6 سال پیش  6 سال پیش
0 0

سلام دوستان خسته نباشید من یک 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 پاسخ وجود دارد.
پاسخ به سوال 
129513  6 سال پیش
0 0

از دستور زیر استفاده کن. در جای درستش

mediaplayer.stop();

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .