当前位置: 首页 > 知识库问答 >
问题:

Mediaplayer如何避免播放多个音频在RecyclerView

宫坚
2023-03-14

我已经建立了我的音乐列表(RecyclerView)中的每一项都有两个按钮,第一个播放音乐,第二个暂停停止,但当我点击播放两个音频时,两个启动,而我希望第一个停止。这是我的适配器(标志是在播放音频时将图像视图从播放更改为暂停)

public class ViewAudioListAdapter extends RecyclerView.Adapter<ViewAudioListAdapter.ViewHolder>{
private List<Audio> values;
private Context context;
private MediaPlayer mediaPlayer;
private boolean flage = true;



public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView textViewName;
    public ImageView ivPlay,ivStop;
    public View layout;


    public ViewHolder(View view) {
        super(view);
        this.textViewName = (TextView) view.findViewById(R.id.textViewName);
        this.ivPlay = (ImageView) view.findViewById(R.id.ivPlay);
        this.ivStop = (ImageView) view.findViewById(R.id.ivStop);

        this.layout = view;
    }
}

public void add(int position, Audio audio){
    values.add(position, audio);
    notifyItemInserted(position);
}

public void remove(int position){
    values.remove(position);
    notifyItemRemoved(position);
}

public ViewAudioListAdapter(List<Audio> myDataset, Context context) {
    values = myDataset;
    this.context=context;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View v = inflater.inflate(R.layout.view_audio_item, parent, false);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
    // set the view's size, margins, paddings and layout parameters
    ViewHolder vh = new ViewHolder(v);
    return vh;    }

@Override
public void onBindViewHolder(final ViewAudioListAdapter.ViewHolder holder, int position) {
    final Audio audio = new Audio(values.get(position));
    final String name = audio.getName();


    holder.textViewName.setText(name);

    holder.ivPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (flage){
                mediaPlayer = MediaPlayer.create(context , Uri.parse(url));
                flage = false ;
            }
            if (mediaPlayer.isPlaying()){
                mediaPlayer.pause();
                holder.ivPlay.setImageResource(R.drawable.icons_play);
            }else{
                mediaPlayer.start();
                holder.ivPlay.setImageResource(R.drawable.icons_pause);
            }
        }
    });

    holder.ivStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!flage){
                mediaPlayer.stop();
                mediaPlayer.release();
                flage = true;
            }
            holder.ivPlay.setImageResource(R.drawable.icons_play);
        }
    });
}


@Override
public int getItemCount() {
    return values.size();
}}

非常感谢。

共有1个答案

奚高扬
2023-03-14

请尝试添加< code > media player . stop();和< code > media player . reset();在启动mediaPlayer之前,在click事件中使用以下代码

 holder.ivPlay.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (flage){
            mediaPlayer = MediaPlayer.create(context , Uri.parse(url));
            flage = false ;
        }
        if (mediaPlayer.isPlaying()){
            mediaPlayer.pause();
            holder.ivPlay.setImageResource(R.drawable.icons_play);
        }else{
             mediaPlayer.stop();//add here
            mediaPlayer.reset();//update here
            mediaPlayer = MediaPlayer.create(context , Uri.parse(url));// new update here
            mediaPlayer.start();
            holder.ivPlay.setImageResource(R.drawable.icons_pause);
        }
    }
});

这可能会有所帮助…

holder.ivPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (flage){
                mediaPlayer = MediaPlayer.create(context , Uri.parse(url));
                flage = false ;
            }
            if (mediaPlayer.isPlaying()){
                mediaPlayer.pause();
                holder.ivPlay.setImageResource(R.drawable.icons_play);
            }else{

                 try {

                    if (mediaPlayer.isPlaying()) {
                     mediaPlayer.stop();
                    mediaPlayer.release();
                      mediaPlayer = MediaPlayer.create(context , Uri.parse(url));
                               }

                 mediaPlayer.start();
                holder.ivPlay.setImageResource(R.drawable.icons_pause);
} catch (Exception e) {
}

            }
        }
    });
 类似资料:
  • 主要内容:本节引言:,1.相关方法详解,2.使用代码示例,3.本节示例代码下载:,本节小结:本节引言: 本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。它支持三种不同的媒体来源: 本地资源 内部的URI,比如你可以通过ContentResolver来获取 外部URL(流) 对于Android所支持的的媒体格式列表 对于Androi

  • 今天,我制作了一个在Android中播放音乐的应用程序。 使用MediaPlayer播放音频文件时失败;它无法播放任何文件音频。此异常引发日志cat,如: E/MediaPlayer:错误(1,-2147483648) 带系统。错误:java。io。IOException:准备失败:状态=0x1 W/System.err:android.media.MediaPlayer.prepare(本机方法

  • 本文向大家介绍Android MediaPlayer 播放音频的方式,包括了Android MediaPlayer 播放音频的方式的使用技巧和注意事项,需要的朋友参考一下 主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。 为了方便表达,定义变量名为mediaPlayer。 MediaPlay

  • 本文向大家介绍Android多媒体应用使用MediaPlayer播放音频,包括了Android多媒体应用使用MediaPlayer播放音频的使用技巧和注意事项,需要的朋友参考一下 Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持的视频格式有3GPP(.3gp)和MPEG-4(.mp4)等。

  • 本文向大家介绍Android MediaPlayer 音频倍速播放 调整播放速度问题,包括了Android MediaPlayer 音频倍速播放 调整播放速度问题的使用技巧和注意事项,需要的朋友参考一下 现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5、1.5、2倍等等。 从Android API 23 (Android M)开始,MediaPlayer支持调整播放速度。

  • 问题内容: 我想创建一个Android应用程序,该应用程序是Internet广播电台的客户端。我想让它看起来像是Android原生的吗?但是我与Android API逻辑和文档相混淆。我得到的是我需要MediaPlayer和MediaController类。我是对的,有没有很好的Android AUDIO播放器示例? 特别是,我对如何一起使用和类非常感兴趣。 UPD: 最后,我得到了代码,该代码正