Свойства интерфейса DBus

Самый быстрый способ сделать это через MediaMetadataRetriever. Однако есть ловушка

, если вы используете URI и контекст для установки источника данных, вы можете столкнуться с ошибкой https://code.google.com/p/ android / questions / detail? id = 35794

Решение - использовать абсолютный путь к файлу для получения метаданных медиа-файла.

Ниже приведен фрагмент кода, чтобы сделать это

 private static String getDuration(File file) {
                MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
                mediaMetadataRetriever.setDataSource(file.getAbsolutePath());
                String durationStr = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
                return Utils.formateMilliSeccond(Long.parseLong(durationStr));
            }

Теперь вы можете преобразовать миллисекунды в удобочитаемый формат, используя любой из следующих форматов

     /**
         * Function to convert milliseconds time to
         * Timer Format
         * Hours:Minutes:Seconds
         */
        public static String formateMilliSeccond(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  String.format("%02d Min, %02d Sec",
    //                TimeUnit.MILLISECONDS.toMinutes(milliseconds),
    //                TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
    //                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));

            // return timer string
            return finalTimerString;
        }

6
задан Ryan Haining 9 June 2014 в 18:15
поделиться

2 ответа

Прежде всего, проверьте документацию и исходники hal, они всегда ваши друзья.

import dbus
bus = dbus.SystemBus()
dev = bus.get_object("org.freedesktop.Hal", u'/org/freedesktop/Hal/devices/computer_logicaldev_input')
iface = dbus.Interface(dev, 'org.freedesktop.Hal.Device')
props = iface.GetAllProperties()
print "\n".join(("%s: %s" % (k, props[k]) for k in props))

В крайнем случае, вы всегда можете найти интересующие вас свойства с помощью команды lshal.

2
ответ дан 17 December 2019 в 04:51
поделиться

В общем, вы можете использовать метод GetAll на интерфейсе org.freedesktop.DBus.Properties.

.
3
ответ дан 17 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: