2017-03-23 51 views
2

我正在製作一個簡單的音頻播放器,它將顯示當我暫停/停止音頻時播放音頻的時間(編輯:例如,如果我在52秒後重新開始播放音樂,然後在55秒暫停​​,敬酒說「3」)。截至目前,我使用的是:識別播放音頻文件的運行時間

long startTime = System.currentTimeMillis(); 
long stopTime = System.currentTimeMillis(); 
Toast.makeText(getApplicationContext(), "Elapsed time was " + ((stopTime - startTime)/1000) + " seconds.", Toast.LENGTH_LONG).show();} 

顯示時間差。我遇到的問題是,startTime是我第一次玩遊戲,而不是最近的時間(只是不斷增加)。

import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

private Button playMusic; 
private MediaPlayer mediaPlayer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.adele); 
    mediaPlayer.setLooping(true); 
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){ 
     @Override 
     public void onCompletion(MediaPlayer mp){ 
      int duration = mp.getCurrentPosition()/1000; 
      Toast.makeText(getApplicationContext(), "Duration:" + duration + " seconds", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    playMusic = (Button) findViewById(R.id.playButton); 
    playMusic.setOnClickListener(new View.OnClickListener(){ 
     long startTime = System.currentTimeMillis(); 
     @Override 
     public void onClick(View v){ 

      if (mediaPlayer.isPlaying()) { 
       pauseMusic(); 
       long stopTime = System.currentTimeMillis(); 
       Toast.makeText(getApplicationContext(), "Elapsed time was " + ((stopTime - startTime)/1000) + " seconds.", Toast.LENGTH_LONG).show();} 
      else { 
       startMusic(); 
      } 
     } 
    }); 

    setVolumeControlStream(AudioManager.STREAM_MUSIC); 
} 

public void pauseMusic(){ 
    if (mediaPlayer !=null){ 
     mediaPlayer.pause(); 
     playMusic.setText(getString(R.string.button_start)); 
    } 
} 

public void startMusic(){ 
    if (mediaPlayer != null){ 
     mediaPlayer.start(); 
     playMusic.setText(getString(R.string.button_pause)); 
    } 
} 

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

回答

0

首先把長startTime和停止時間以上的onCreate()method.Now,嘗試在的onPause()方法中添加幾行代碼,改變你這樣的代碼:

public void pauseMusic(){ 
    if (mediaPlayer !=null){ 
     mediaPlayer.pause(); 
     startTime=mediaPlayer.getCurrentPosition(); 
     playMusic.setText(getString(R.string.button_start)); 
    } 
} 
+0

嗨Android的怪胎,我很感激幫助。當我更改代碼時,現在只是總是說「已經過去的時間是1490313723秒」,不管我播放歌曲的時間有多短或多長。我改變了你的startTime = mp1 ....到startTime = mediaPlayer ....因爲mp1不是'我的代碼中的一個變量,(我認爲,雖然我是新手),它的意思是mediaPlayer。另外,如果我正確地閱讀它,我把「long startTime = System.currentTimeMillis();」和「long stopTime = System.currentTimeMillis();」在「private MediaPlayer mediaPlayer」下面在我上面的代碼中。 – Robert

+0

好的,我想出了我相信你有什麼是使用當前歌曲位置作爲敬酒的時間,因爲它已經播放了多長時間。這是一個很好的解決方案。不幸的是,我想我沒有很好地表達我想要的東西。我試圖要求能夠在開始/暫停(即,如果我重新開始52秒到一首歌曲,然後暫停在55秒,敬酒說「3」)之間有多長時間。 – Robert

+0

我希望這對你有所幫助。我也做過相同的編輯。 –