эмуляторе всё работает, а на реальном устройстве выдаёт ошибку:
java.lang.IllegalArgumentException at android.media.MediaMetadataRetriever.setDataSource
В строке с setDataSource
Предполагаю, что это как-то связано с версиями API, но решение этой проблемы не нашёл.
Можете помочь справиться с ошибкой?
А дальнейшее описание эксепшна есть?
Судя по документации нужно передавать FileDescriptor, а у вас просто строка. Думаю нужно копать в этом направлении
Попробую покопаться, спасибо
Не слушай никого. Посмотри какие там варианты параметров. Там их 8 штук setDataSource. Среди них есть и строка.
Ты все еще за 8000 км от компьютера? Если уж смотреть документацию, то в документации 8 вариантов метода. Среди которых есть и строка. setDataSource public void setDataSource (String path) Sets the data source (file-path or http/rtsp URL) to use. Что в общем-то и подтверждается тем, что на эмуляторе работает корректно.
Мб если версия андройда ниже на реальном устройстве то можно попробовать указать легаси сторедж в манифесте
И как это повлияет? Автор вопроса не удосужился в вопросе описать что он там передает в параметре метода. Если там url на видео в интернете, то чем поможет "легаси сторедж"? Мы не знаем всех условий. Ни версии андроидов, ни полного кода проекта. Ни откуда видео берется. Вообще ничего. Какой смысл тренировать в себе телепатические способности?
Да, пока ещё отдыхаю😂
Ну если бы ты сам запускал студию хоть иногда знал бы разницу как работает со стореджем андройд на старых версиях и на новых версиях Я кинул предположение которое которое не заняло у меня и больше 5 минут. А так согласен что без логирования/дебагинга это тыкание пальцем в небо
не знаю и знать не хочу. Но если там берется не из файла на файловой системе, то на setDataSource никак не влиет.
А, ну да, можешь в качестве эксперимента поставить targetApi 28, например, и проверить на устройстве. Вполне возможно что неправильно путь к файлу указан (прав у приложения нет). Если в этом причина - то курить как правильно файлы передавать (вроде с 30 апи строже стало, а в 29 можно было флаг в манифесте прописать)
Я передаю uri локального видео, версии андроидов: На эмуляторе 10 На реальном устройстве 12
Тогда очень похоже, что нужно получить разрешение на доступ в более новом андроиде. Ну и форма uri имеет значение. files:// в новых не работают, если приложение не файл мэнэджер. Хотя это опять же телепатия. Локально для приложения все работает, на любой версии андроида. Надо экстрасенсов вызывать, что бы рассказывали и показывали, что там у вас. И почему эмулятор старой версии андроида, хотя устройства новые.
У меня форма как раз files://
Обсуждают сегодня