Android: MediaMetadataRetriever вызвал java.lang.RuntimeException: сбой setDataSource: статус = 0x80000000

Я пытаюсь выбрать видеофайл с помощью намерения и извлечь метаданные из видео.

Однако я получил несколько отчетов об ошибках от пользователей и сообщил о следующем исключении:

Exception java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=12004, result=-1, data=Intent { dat=content://media/external/images/media/63141 flg=0x1 (has extras) }} to activity {my.app/my.app.VideoActivity}: 
java.lang.RuntimeException: setDataSource failed: status = 0x80000000

Вот код захвата метаданных:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Uri uri = intent.getData();
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(this, uri); // error occurs here
    } catch (IllegalArgumentException e) {
        e.printStackTrace();           
    } catch (SecurityException e) {
        e.printStackTrace();           
    }
}

Почему появляется исключение и как его исправить?


person Season    schedule 09.04.2017    source источник
comment
Вы добились какого-либо прогресса в этом? Исследование той же проблемы пока безуспешно, и в моих тестах это происходит только на устройствах KK.   -  person Daniel Kotin    schedule 12.04.2017


Ответы (1)


Одна из проблем с этим методом в более поздних версиях API заключается в том, что он требует разрешений манифеста, и это не всегда очевидно из сообщения об ошибке — см. это обсуждение: https://code.google.com/p/android/Issues/detail?id=35794

Если это проблема, то для вашего случая я думаю, что ваш URI выглядит как локальный файл, поэтому вам нужно разрешение на чтение/запись файла. Если бы это был URL-адрес в Интернете, вам потребовалось бы разрешение в Интернете.

person Mick    schedule 10.04.2017