Получение видео (не локальных) из приложения Google Photos

В приложении Google Фото я пытаюсь выбрать видео, которое не кэшируется на устройстве.

Я использую намерение ACTION_GET_CONTENT, чтобы открыть диалоговое окно параметров, и оттуда я выбираю приложение Google Photos.

При выборе локальных видео в этом виде возвращается Uri.

Содержание:// СМИ / внешние / видео / СМИ /6708

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

/ storage / emulated / 0 / WhatsApp / Медиа /WhatsApp Video/VID-20131102-WA0000.mp4

Теперь, когда я выбираю онлайн-видео, т.е. видео, которое еще не доступно на моем устройстве и которое необходимо загрузить, чтобы использовать его, возвращаемый Uri выглядит следующим образом:

содержание://com.google.android.apps.photos.content/1/ https://lh6.googleusercontent.com/_RD-QTO_SK5jlaPldTe2n5GANqMc3h-ukcbNoFlF1NLy=s0-d

Теперь, с этим, нет задокументированного ContentProvider, который помог бы мне получить фактическую ссылку на это видео. Даже если я делаю запрос, он ничего не возвращает, кроме столбцов DISPLAY_NAME и SIZE.

DISPLAY_NAME содержит video.mpeg (одинаковое отображаемое имя для разных видео)

РАЗМЕР, вероятно, говорит мне размер фактического файла.

Ссылался на этот пост на SO.

Я проверил различные записи и подумал, что мне нужно будет получить InputStream для видео через контент-провайдера, сохранить файл и работать с ним. Выбор файла изображения, однако, работает нормально, а с видео - нет.

Итак, чтобы скопировать поток в файл, у меня есть этот код.

InputStream inputStream = context.getContentResolver (). OpenInputStream(Uri.parse(path));

И, наконец, запись во временный файл. Файл создается, но, похоже, он неправильно отформатирован. VLC воспроизводит файл, но показывает только первый кадр.

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

Кто-нибудь испытывал то же самое?

1 ответ

Решение

Наконец-то нашел решение проблемы. Это будет работать как для изображений, так и для видео.

Ссылался на это видео:

DevBytes: платформа доступа к хранилищу Android 4.4: клиент

https://www.youtube.com/watch?v=UFj9AEz0DHQ

Намерение намерения = новое намерение (Intent.ACTION_GET_CONTENT);
intent.setType("изображение /*");
startActivity(намерение);

Получите Uri, получите доступ и сохраните файл следующим образом:

ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver ().openFileDescriptor (Uri.parse (путь),"г");

FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor ();

InputStream inputStream = new FileInputStream (fileDescriptor);

BufferedInputStream reader = new BufferedInputStream (inputStream);

// Создать выходной поток в файл, который вы хотите сохранить
BufferedOutputStream outStream = new BufferedOutputStream(новый FileOutputStream(filePath));
byte[] buf = новый байт [2048];
int len;
while ((len = reader.read(buf)) > 0) {
    outStream.write(buf, 0, len);
}

По некоторым причинам получение входного потока без использования ParcelFileDescriptor не работает.

Другие вопросы по тегам