我有一个部分在我的应用程序,加载媒体播放器与URL在回收者视图。有时播放url mp3不是一个有效的文件,但我需要显示它没有任何东西既不播放mp3文件当然,因为它已经无效。我的问题是媒体播放器不能正常工作时使用准备Async
即使它是一个有效的文件mp3它不工作,我知道它是因为重新加载相同的文件有时工作,有时不工作。代码>准备方法工作完美和准备Async不正常工作
@Override
public void onBindViewHolder(AudioRecycleViewAdapter.ViewHolder viewHolder, final int position) {
final MediaPlayer mp = new MediaPlayer();
try {
// Get the data model based on position
final PlayAudioModel model = mVisitHistory.get(position);
// Set item views based on your views and data model
final ImageView playControllerImageView = viewHolder.playControllerImageView;
final ProgressBar playProgressBar = viewHolder.playProgressBar;
CircleImageView userImageView = viewHolder.userImageView;
TextView timeTextView = viewHolder.timeTextView;
final TextView durationTextView = viewHolder.durationTextView;
if (model.getSenderType().equals("doctor")) {
Glide.with(mContext).load(Constants.SERVER_IP + Constants.GET_DOCTOR_IMAGE_FOR_VISIT_HISTORY
.replace("{visitRequestId}", "" + model.getVisitRequestId())
.replace("{doctorId}", "" + model.getDoctorId())
).into(userImageView);
userImageView.setBorderColor(mContext.getResources().getColor(R.color.black));
} else {
Glide.with(mContext).load(Constants.SERVER_IP + Constants.GET_PATIENT_IMAGE
).into(userImageView);
userImageView.setBorderColor(mContext.getResources().getColor(R.color.colorPrimary));
}
timeTextView.setText(DateHelper.convertStringUtcToLocalDate(model.getTime()));
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
System.out.println();
return false;
}
});
mp.setDataSource(Constants.SERVER_IP + Constants.PLAY_AUDIO
.replace("{recordId}", "" + model.getVoiceRecordId()));
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
playProgressBar.setMax(mp.getDuration());
double mins = Math.floor((mp.getDuration() % (1000 * 60 * 60)) / (1000 * 60));
double secs = Math.floor((mp.getDuration() % (1000 * 60)) / 1000);
durationTextView.setText((int) mins + ":" + (int) secs);
final CountDownTimer mpTimer = new CountDownTimer(mp.getDuration(), 1) {
@Override
public void onTick(long millisUntilFinished) {
playProgressBar.setProgress(mp.getDuration() - (int) millisUntilFinished);
}
@Override
public void onFinish() {
playControllerImageView.setImageDrawable(mContext.getDrawable(R.drawable.ic_play_circle));
playProgressBar.setProgress(0);
}
};
playControllerImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mp.isPlaying()) {
mpTimer.start();
mp.start();
playControllerImageView.setImageDrawable(mContext.getDrawable(R.drawable.ic_pause));
} else {
mp.pause();
mpTimer.cancel();
playProgressBar.setProgress(0);
playControllerImageView.setImageDrawable(mContext.getDrawable(R.drawable.ic_play_circle));
}
}
});
}
});
mp.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
我通过在模型中创建一个媒体播放器解决了这个问题,我在RecyclerView
中使用了该模型,并且我在模型中执行了所有操作,如错误侦听器和prepareAsync,因为recycler视图重新创建了整个对象,这就是我的问题,prepareAsync
现在工作得很好!,请注意,我将onPrepared
回调保留在recycler视图中,并执行了类似的操作
musics.get(position).getMediaPlayer().setOnPreparedListener(...)
我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?
1.1.1. 多媒体播放 1.1.1. 多媒体播放 我们事实上对上游芯片厂商自带的播放器方式做了调整。 Amlogic 芯片 BaseCode 我们禁用了芯片厂商的原生代码的 libplayer 包,原因是芯片厂商的播放器是直接使用 ALSA 框架来调用音频播放功能的。 这对我们 RokidOS 平台让多个进程使用音频设备造成阻碍。基于这个因素,我们使用了 RokidOS 开发的媒体播放库 lib
这可能不是一个可以接受的问题,但我现在非常绝望。 我需要一个同步java媒体播放器与快速寻找和平衡修改。 脚本: 我有一个javaFX项目,我必须在循环中播放一个非常短(50-100毫秒)的媒体文件。问题是,在重新启动之前,我需要等待一些要求。 简而言之:播放声音- javafx提供了一个我修改过的媒体播放器。 如果有人能为我指出正确的方向(图书馆/我错过的东西),我将不胜感激 ps允许的java
当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误:
我有一个简单的播放器和录音机。一切都很好,但都有一个问题。我想添加搜索栏来查看播放记录的进度,并使用此搜索栏设置玩家应该播放的位置。我有进步,但没有效果。这是代码: 你知道如何使用seek bar来查看进度和设置记录的位置吗?
我已经成功地能够从我的服务器流MP3,现在我想显示一个媒体播放器通知与控制时,歌曲开始播放。我已经遵循了一些教程如何做到这一点,但我仍然得到错误时,试图在我的应用程序中做同样的事情。 这是我尝试在音乐开始播放时显示通知的方式 这是完整的 但是,当我运行代码并单击播放按钮时,应用程序崩溃,logcat返回此错误,但没有指向特定的代码行。