Android的媒体播放器 - 基于搜索条进度更新的TextView音频经过时间(Android M

2019-10-16 12:37发布

使用媒体播放器来播放音频文件。

一切工作正常,但需要的TextView被更新的音频经过时间。

textview.setText(mediaplayer.getCurrentPosition()/100000.0).toString();

这给双重价值,但不到一分钟,如果结束时间是越来越经过时间1分钟它显示0:60 ...但它应该1:00 ...

是否有任何其它的方式来显示基于搜索条的进步所经过的时间?

谢谢。

Answer 1:

该工程─回答另一篇文章采取: 如何正确显示的MediaPlayer的位置/时间?

日期格式适用于日期,而不是时间间隔。 所以,如果你得到1秒的位置,数据格式将此解释为是指日期/时间开始日历后1秒。


private String getTimeString(long millis) {
    StringBuffer buf = new StringBuffer();

    int hours = millis / (1000*60*60);
    int minutes = ( millis % (1000*60*60) ) / (1000*60);
    int seconds = ( ( millis % (1000*60*60) ) % (1000*60) ) / 1000;

    buf
        .append(String.format("%02d", hours))
        .append(":")
        .append(String.format("%02d", minutes))
        .append(":")
        .append(tring.format("%02d", seconds));

    return buf.toString();
}

然后像做


totalTime.setText(getTimeString(duration));
currentTime.setText(getTimeString(position));


Answer 2:

音乐示例应用程序有一个类MusicUtils :

    /*  Try to use String.format() as little as possible, because it creates a
 *  new Formatter every time you call it, which is very inefficient.
 *  Reusing an existing Formatter more than tripled the speed of
 *  makeTimeString().
 *  This Formatter/StringBuilder are also used by makeAlbumSongsLabel()
 */
private static StringBuilder sFormatBuilder = new StringBuilder();
private static Formatter sFormatter = new Formatter(sFormatBuilder, Locale.getDefault());
private static final Object[] sTimeArgs = new Object[5];

public static String makeTimeString(Context context, long secs) {
    String durationformat = context.getString(
            secs < 3600 ? R.string.durationformatshort : R.string.durationformatlong);

    /* Provide multiple arguments so the format can be changed easily
     * by modifying the xml.
     */
    sFormatBuilder.setLength(0);

    final Object[] timeArgs = sTimeArgs;
    timeArgs[0] = secs / 3600;
    timeArgs[1] = secs / 60;
    timeArgs[2] = (secs / 60) % 60;
    timeArgs[3] = secs;
    timeArgs[4] = secs % 60;

    return sFormatter.format(durationformat, timeArgs).toString();
}

您可以使用。

但carlovv的解决方案也可以工作,如果你除以1000 getCurrentPosition()的结果,该方法返回毫秒。

这是在strings.xml善有善报

    <string translatable="false" name="durationformatshort">
    <xliff:g id="format">%2$d:%5$02d</xliff:g>
</string>
<string translatable="false" name="durationformatlong">
    <xliff:g id="format">%1$d:%3$02d:%5$02d</xliff:g>
</string>


Answer 3:

你可以转换成getCurrentPosition日期和使用日期格式来设置输出字符串。

Date d = new Date();
d.setTime(mediaplayer.getCurrentPosition());
private final SimpleDateFormat timeFormat = new SimpleDateFormat("HH.mm");
String time = timeFormat.format(d).toString();


文章来源: Android Mediaplayer - based on seekbar progress update the elapsed time of audio in textview