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

媒体播放器有奇怪的行为

潘胤
2023-03-14

我有一个部分在我的应用程序,加载媒体播放器与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();

        }
    }

共有1个答案

公冶伟
2023-03-14

我通过在模型中创建一个媒体播放器解决了这个问题,我在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返回此错误,但没有指向特定的代码行。