2015-07-10 144 views
0

我将一首歌曲放入应用程序(tabhost),并且我有进度条,播放按钮,停止按钮,循环按钮。当停止音乐时,Android媒体播放器进度条停止为“0”

我想要的功能是:

  • 当用户播放音乐,进度条开始从“0”,当用户按下停止运行
  • ,进度条停在它那里,等待用户再次按下发挥,然后继续离开的地方

我可能会在以后的按钮名称更改为“暂停”,但是这是我需要的R功能现在。

眼下,2个问题:

  1. 当按下停止,进度条返回到“0”,但音乐重新开始从上次停止的地方玩(音乐不是从一开始就玩)
  2. 进度条运行速度超出预期;它在音乐结束之前运行到最后。

这里是我的代码,希望有人能够帮助非常感谢你:

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ProgressBar; 


import java.util.logging.LogRecord; 

public class TabMusicActivity extends Activity { 
    MediaPlayer mediaPlayer; 
    private boolean playing = false; 

    private ProgressBar progressBar; 
    private Handler handler = new Handler(); 
    int progress = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_music); 

     final ImageButton buttonStart = (ImageButton)findViewById(R.id.buttonStart); 

     progressBar = (ProgressBar)findViewById(R.id.progressBar); 


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



       if (!playing) { 
        playing = true; 
        buttonStart.setImageResource(R.drawable.music_stop_button); 
        Uri path = Uri.parse("android.resource://"+getPackageName()+"/"+ R.raw.bashibafo); 

        if (mediaPlayer == null) { 
         mediaPlayer = MediaPlayer.create(TabMusicActivity.this, path); 
        } 
        if (mediaPlayer != null) { 
         mediaPlayer.start(); 
         process(); 
        } 
       } 
       else { 
        playing = false; 
        buttonStart.setImageResource(R.drawable.button_play); 

        if(mediaPlayer.isPlaying()){ 
         mediaPlayer.pause(); 

        } 
       } 

      } 
     }); 



     ImageButton buttonLoop = (ImageButton)findViewById(R.id.buttonLoop); 
     buttonLoop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mediaPlayer.setLooping(true); 
      } 
     }); 
    } 

    private void process(){ 
     progressBar.setProgress(0); 
     progress = 0; 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (progress < 100){ 
        progress = doWork(); 
        try{ 
         Thread.sleep(5000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          progressBar.setProgress(progress); 
         } 
        }); 
       } 
      } 
     }).start(); 
    } 

    private int doWork(){ 
     progress++; 
     if (progress < 100){ 
      return progress; 
     } 

     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return 100; 
    } 

    @Override 
    protected void onDestroy() { 
     if(mediaPlayer!=null && mediaPlayer.isPlaying()){ 
      mediaPlayer.stop(); 
      mediaPlayer.release(); 
      mediaPlayer = null; 
     } 
     super.onDestroy(); 
    } 
} 

回答

1

我用这个代码,用于播放音乐

if (player != null) 
     { 
      player.seekTo(length); 
      player.start(); 
     } 
     else 
     { 
      player = MediaPlayer.create(context, Uri.fromFile(new File(url))); 

      seek_bar.setMax(player.getDuration()); 

      seek_bar.setProgress(player.getCurrentPosition()); 

      player.setOnCompletionListener(new OnCompletionListener() 
      { 
       @Override 
       public void onCompletion(MediaPlayer mp) 
       { 
        player.reset(); 
        player.release(); 
        player = null; 
        seekHandler.removeCallbacks(run); 
        seek_bar.setProgress(0); 
        if (recieveOrSend.equals("send")) 
        { 

         holder.iv_audio_pause_send.setVisibility(View.INVISIBLE); 
         holder.iv_audio_play_send.setVisibility(View.VISIBLE); 
        } 
        else 
        { 
         holder.iv_audio_pause_recieve.setVisibility(View.INVISIBLE); 
         holder.iv_audio_play_recieve.setVisibility(View.VISIBLE); 
        } 
       } 
      }); 

      //   player.prepare(); 
      player.start(); 

     } 
     seekUpdation(); 

Methods--

Runnable run = new Runnable() 
{ 
    @Override 
    public void run() 
    { 

     seekUpdation(); 
    } 
}; 

public void seekUpdation() 
{ 
    seek_bar.setProgress(player.getCurrentPosition()); 
    seekHandler.postDelayed(run, 1000); 
} 

private void pausePlayer() 
{ 

    try 
    { 
     if (player != null) 
     { 
      player.pause(); 
      length = player.getCurrentPosition(); 
      seekHandler.removeCallbacks(run); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
}