2017-03-15 139 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()來自後臺線程的對話框,並且我不知道是否支持該對話框。

相關問題