2017-03-15 161 views
-1

我已经搜索了另一个MP3播放器用于我的android项目,但我找不到。 MediaPlayer不好!除了MediaPlayer以外,还有其他的Android mp3播放器吗?

我试图播放一首歌曲,所以当我点击播放的歌曲,但如果我再次点击它,它应该停止,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(); 
        } 


       } 
      }); 
+0

嗯...... [ExoPlayer](https://developer.android.com/guide/topics/media/exoplayer.html)? – pskink

+0

请详细解释**,**,“MediaPlayer不好用”的意思。 – CommonsWare

+0

@CommonsWare Android常规MediaPlayer,我试图用progressdialog加载并在第一次点击时播放,如果再次点击歌曲,它必须停止播放。 –

回答

0

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

简单的解决方法是摆脱OnPreparedListener并在create()之后致电dismiss()。最有可能的是,你会发现你的ProgressDialog没有太大的好处。

或者:

  • 更换create()只需调用new MediaPlayer()
  • MediaPlayer添加您OnPreparedListener
  • 呼叫setDataSource()在后台线程,因为这会执行一些磁盘I/O,和你做不想在主应用程序线程上做到这一点

您可能需要然后安排在主应用程序线程上调用dismiss() —我还没有尝试dismiss()来自后台线程的对话框,并且我不知道是否支持该对话框。

相关问题