2013-04-26 2 views
1

В моем приложении у меня много файлов мультимедиа (.mp4) и файла pdf, поэтому у меня есть файл apk с расширением.Файл расширения Android.

, но я не знаю, как воспроизвести видеофайл в виде видео из файла расширения (файл obb) и открыть файл PDF из файла расширения.

у кого есть представление. помогите мне

+0

Maby youll найдет здесь то, что вы ищете. http://stackoverflow.com/questions/14139587/android-expansion-file –

+0

Thnaks Maikel Bollemeijer, но как получить Uri для просмотра видео и открыть файл Pdf? –

+0

Просто следите за тем, как он указал на это сообщение, но измените расширение файла.и для воспроизведения или открытия видео или в формате pdf это точно так же, как и вы, как это обычно делаете. если вы не знаете, как сделать поиск в Google, убедитесь, что вы его заработаете. –

ответ

0

На самом деле довольно легко читать файлы фильмов и другие материалы непосредственно из файла расширения, используя инструменты zip, предоставленные Google (com.android.vending.zipfile).

Сначала получите файл расширения, используя методы, предоставляемые в библиотеке. Пареметры представляют собой целые числа, которые представляют собой версию вашего основного расширения apk (версия apk, в которой вам нужно добавить пакет расширения) и версию apk patch.

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, APKX_MAIN_APK, APKX_PATCH_APK); 

Видео

Для воспроизведения видео непосредственно из этого zipresourcefile:

AssetFileDescriptor a = expansionFile.getAssetFileDescriptor(pathToFileInsideZip); 

Теперь из этого assetFileDescriptor вы можете получить FileDescriptor и использовать это в вашем медиаплеера, правильный синтаксис, чтобы получить ваш медиаплеер для воспроизведения видео также нуждается в втором и третьем параметрах. Будь то начальный уровень и длина, которую вы можете получить из AssetFileDescriptor.

player.setDataSource(a.getFileDescriptor(), a.getStartOffset(), a.getLength()); 

Другое

Для всех других вещей (например, изображений), вы можете просто получить InputStream из zipresourcefile:

expansionFile.getInputStream(pathToFileInsideZip);` 

Также убедитесь, что вы не сжимать видео в zip, чтобы это работало! , например, чтобы не сжать .mp4 файлы:

zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*" 
+0

Я использую это, чтобы получить pdf-файл из файла расширения 'expandFile.getInputStream (путь + pdfFilename);' но я получаю бесконечный цикл, когда я использую этот InputStream для копирования в каталог хранения файлов, чтобы прочитать pdf. Что я делаю неправильно? У меня есть остальные детали здесь http://stackoverflow.com/questions/26606143/how-to-read-pdfs-from-expansion-file – tvieira

1

Вы можете использовать APKExpansionSupport класс для получения ссылки на файл расширения, а затем открыть актив из файла.

// Get a ZipResourceFile representing a merger of both the main and patch files 
try { 
    ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this, 2, 0); 
    AssetFileDescriptor afd = expansionFile.getAssetFileDescriptor("path-to-music-from-expansion.mp3"); 

    try { 
     mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); 
    } catch (IllegalArgumentException | IllegalStateException | IOException e) { 
     Log.w(TAG, "Failed to update data source for media player", e); 
    } 

    try { 
     mMediaPlayer.prepareAsync(); 
    } catch (IllegalStateException e) { 
     Log.w(TAG, "Failed to prepare media player", e); 
    } 
    mState = State.Preparing; 

    try { 
     afd.close(); 
    } catch (IOException e) { 
     Log.d(TAG, "Failed to close asset file descriptor", e); 
    } 
} catch (IOException e) { 
    Log.w(TAG, "Failed to find expansion file", e); 
} 

Если вы используете файлы расширения для хранения мультимедийных файлов, ZIP файл по-прежнему позволяет использовать Android вызовы воспроизведения медиа, которые обеспечивают смещение и контроль длины (такие как MediaPlayer.setDataSource() и SoundPool.load()). Чтобы это работало, вы не должны выполнять дополнительное сжатие в медиафайлах при создании ZIP-пакетов. Например, при использовании инструмента почтового индекса, вы должны использовать опцию -n, чтобы указать файл суффиксы, которые не должны быть сжаты:

zip -n .mp4;.ogg main_expansion media_files 

Для получения более подробной информации и кода для создания файлов расширения, чтения How to Set Up Android App to Support Expansion Files.

Смежные вопросы