gpt4 book ai didi

android - 单击多个播放按钮 MediaPlayer 开始同时播放多个音频

转载 作者:行者123 更新时间:2023-12-03 02:07:20 25 4
gpt4 key购买 nike

我有一个显示轨道列表的 ListView 。每个列表项都有播放和停止图标来播放和停止轨道。我遇到的问题是,如果我单击多个播放按钮 MediaPlayer 同时播放多个音频,然后如果我尝试停止多个音频应用程序崩溃。如何防止 MediaPlayer 同时播放多个音频?我希望如果 mediaplayer 正在播放一个轨道并且用户单击另一个播放按钮 mediaplyer 应该停止播放上一个轨道并播放播放按钮的轨道用户点击..

最佳答案

您只能创建 MediaPlayer 的一个实例对象,在适配器构造函数上,如下所示:

public class SoundCloudAdapter extends BaseAdapter{

private MediaPlayer mMediaPlayer;
private Context context;
private ArrayList<SoundCloud> soundcloudList;

public SoundCloudAdapter(Context context, ArrayList<SoundCloud> soundcloudList)
{
this.context=context;
this.soundcloudList = soundcloudList;
mMediaPlayer = new MediaPlayer();
}

@Override
public long getItemId(int position)
{
return position;
}

@Override
public int getCount()
{
return soundcloudList.size();
}

@Override
public Object getItem(int position)
{
return soundcloudList.get(position);
}

@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
final ViewHolder holder;

if (convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.soundcloud_item, null);
holder.textview = (TextView) convertView.findViewById(R.id.title);
holder.textview2 = (TextView) convertView.findViewById(R.id.id);
holder.textview3 = (TextView) convertView.findViewById(R.id.download);
// holder.btn = (Button) convertView.findViewById(R.id.button);
holder.img1 = (ImageView) convertView.findViewById(R.id.play2);
holder.img2 = (ImageView) convertView.findViewById(R.id.pause);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}

holder.textview.setText(soundcloudList.get(position).getTitle());
holder.textview2.setText(soundcloudList.get(position).getId());
holder.textview3.setText("Play Count : "+soundcloudList.get(position).getDownload());
if(soundcloudList.get(position).getPlaying())
{
holder.img1.setVisibility(View.GONE);
holder.img2.setVisibility(View.VISIBLE);
}
else
{
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.GONE);
}
holder.img1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v)
{
soundcloudList.get(position).setPlaying(true);
try
{
holder.img1.setVisibility(View.INVISIBLE);
holder.img2.setVisibility(View.VISIBLE);

if(mMediaPlayer.isPlaying())
{
mMediaPlayer.seekTo(0);
mMediaPlayer.pause();
}

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource("http://api.soundcloud.com/tracks/" + soundcloudList.get(position).getId() + "/stream?client_id=xyz");
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
mp.start();

}
});
mMediaPlayer.setOnCompletionListener(
new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
soundcloudList.get(position).setPlaying(false);
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.INVISIBLE);

}
});
}
catch (Exception e)
{
e.printStackTrace();
}

}

});
holder.img2.setOnClickListener(new View.OnClickListener()
{

@Override
public void onClick(final View v)
{
soundcloudList.get(position).setPlaying(false);


holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.INVISIBLE);

mMediaPlayer.seekTo(0);
mMediaPlayer.pause();


}

});

return convertView;

}

static class ViewHolder
{
public TextView textview;
public TextView textview2;
public TextView textview3;
public ImageView img1;
public ImageView img2;
public Button btn;
}

}

关于android - 单击多个播放按钮 MediaPlayer 开始同时播放多个音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com