除了MediaPlayer之外还有Android MP3播放器吗?

时间:2017-03-15 20:43:33

标签: android media-player

我已经搜索了另一个在我的android项目中使用的MP3播放器,但我找不到。 MediaPlayer 不好!

我正在尝试播放一首歌,所以当我点击它播放的歌曲时,如果我再次点击它应该停止,MediaPlayer工作不正常,我试图制作一首歌 的 ProgressDialog

它也没有用。

viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    String name = model.getTitle();
                    Toast.makeText(MainActivity.this, "you clicked on -> " + name , Toast.LENGTH_SHORT).show();
                    String url = model.getMusic();

                    MediaPlayer mp = MediaPlayer.create(getApplicationContext() , Uri.parse(url));

                    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            if (progressDialog != null && progressDialog.isShowing()){
                                progressDialog.dismiss();
                            }
                            mp.start();
                        }
                    });
                    if(mp.isPlaying()){
                        mp.stop();
                    }else {
                        mp.start();
                    }


                }
            });

1 个答案:

答案 0 :(得分:0)

您正在调用静态create()方法。媒体将在该方法返回之前准备好。您的OnPreparedListener监听器永远不会在现有代码中调用。

简单的解决方案是摆脱OnPreparedListener并在dismiss()之后调用create()。最有可能的是,你会发现你的ProgressDialog没有太大帮助。

可替换地:

  • 只需拨打create()
  • 即可替换new MediaPlayer()
  • 添加您的OnPreparedListener
  • 在后台线程中调用setDataSource()上的MediaPlayer,因为这将执行一些磁盘I / O,而您不希望在主应用程序线程上执行此操作

您可能需要安排在主应用程序线程上调用dismiss() - 我没有尝试dismiss()来自后台线程的对话框,我不知道是否支持。< / p>