如何在TextView中显示歌曲的当前时间?

4
如何在TextView中显示音乐的当前时间,格式为“hh:mm:ss”?
Runnable run = new Runnable() {
        @Override
        public void run() {
            seekUpdation();
            compteurCurrentTime = mediaPlayer.getCurrentPosition() / 1000;
            showTimeCurrent();  
        }
    };

    public void seekUpdation() {
        seekbar.setProgress(mediaPlayer.getCurrentPosition());
        seekHandler.postDelayed(run, 1000);   
    }
private void showTimeCurrent() {
//display current time of song in TextView with forme "hh:mm:ss"
}

1
请查看 如何正确显示 MediaPlayer 的位置/持续时间? 的帖子,可能会有所帮助。 - ρяσѕρєя K
非常感谢,它起作用了。 - Mester Hassan
1个回答

11

尝试使用这个Handler

private Runnable mUpdateTimeTask = new Runnable() {
    @Override
    public void run() {
        long totalDuration = MediaAdapter.getMediaPlayer().getDuration();
        long currentDuration = MediaAdapter.getMediaPlayer()
                .getCurrentPosition();

        // Displaying Total Duration time
        songTotalDurationLabel.setText(""
                + utils.milliSecondsToTimer(totalDuration));
        // Displaying time completed playing
        songCurrentDurationLabel.setText(""
                + utils.milliSecondsToTimer(currentDuration));

        // Updating progress bar
        int progress = (utils.getProgressPercentage(currentDuration,
                totalDuration));
        // Log.d("Progress", ""+progress);
        songProgressBar.setProgress(progress);

        // Running this thread after 100 milliseconds
        mHandler.postDelayed(this, 100);
    }
};

上述处理程序中实现的所有方法:

public String milliSecondsToTimer(long milliseconds){
    String finalTimerString = "";
    String secondsString = "";

    // Convert total duration into time
       int hours = (int)( milliseconds / (1000*60*60));
       int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60);
       int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000);
       // Add hours if there
       if(hours > 0){
           finalTimerString = hours + ":";
       }

       // Prepending 0 to seconds if it is one digit
       if(seconds < 10){ 
           secondsString = "0" + seconds;
       }else{
           secondsString = "" + seconds;}

       finalTimerString = finalTimerString + minutes + ":" + secondsString;

    // return timer string
    return finalTimerString;
}

另一个是

public int getProgressPercentage(long currentDuration, long totalDuration){
    Double percentage = (double) 0;

    long currentSeconds = (int) (currentDuration / 1000);
    long totalSeconds = (int) (totalDuration / 1000);

    // calculating percentage
    percentage =(((double)currentSeconds)/totalSeconds)*100;

    // return percentage
    return percentage.intValue();
}
希望这有所帮助。

这并不是一个好的解决方案。它会使用户界面变得缓慢,最好使用'ScheduledExecutorService'。 - Ahmet K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接