Android Mediaplayer - на основе прогресса на панели поиска обновляется истекшее время аудио в текстовом просмотре - PullRequest
1 голос
/ 24 марта 2011

Использование Mediaplayer для воспроизведения аудиофайла.

Все работает нормально, но истекшее время аудио необходимо обновить в textview.

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

Это дает двойное значение, но если время окончания больше минуты и истекшее время составляет 1 минуту, оно показывает 0:60 ... но оно должно быть 1:00 ...

Есть ли другой способ показать истекшее время в зависимости от прогресса на панели поиска?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 08 апреля 2011

Это работает - Ответ взят из другого поста: Как правильно отобразить позицию / продолжительность MediaPlayer?

DateFormat работает для дат, а не для временных интервалов.Таким образом, если вы получаете позицию в 1 секунду, формат данных интерпретирует это как означающее, что дата / время составляют 1 секунду после начала календаря.*

1 голос
/ 31 марта 2011

Пример приложения Music имеет класс 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 будет работать, если вы разделите результатgetCurrentPosition () на 1000, так как метод возвращает миллисекунды.

это то, что входит в ваш 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>
0 голосов
/ 24 марта 2011

вы можете конвертировать getCurrentPosition в date и использовать dateFormat для установки вашей выходной строки.

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