2013-07-08 6 views
2

Пробовал читать видео из моего расширения apk (файл .obb), но он, похоже, не работает. Последовали за каждым шагом, упомянутым в официальных документах Android. Я использую пример-приложение (Пример загрузчика приложения в Android-sdk/extras/google/play_apk_expansion/downloader_sample), чтобы проверить, могу ли я прочитать файл .obb. Это то, что я сделал.Не удалось прочитать/получить доступ к видеофайлам внутри файла расширения APK Expansion (.obb). Он выбрасывает nullpointerexception

  1. Создал ZIP-файл с нулевым сжатием из моих видеофайлов .mp4 как «videos.zip».

  2. Успешно создан файл .obb с помощью инструмента «jobb» для Android.

  3. Разместил файл obb (main.6.com.example.expansion.downloader.obb) в /sdcard/Android/obb/com.example.expansion.downloader/.

  4. Создал новый класс MediaPlayerActivity (MediaPlayerActivity.java), где я пытаюсь воспроизвести видеофайл внутри файла .obb.

    expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this, 
           6, 0);  
    ..... 
    ..... 
    ..... 
    AssetFileDescriptor afd = expansionFile.getAssetFileDescriptor("sample1.mp4"); //nullpointerexception at this line. 
    Log.i("afd: ", ""+afd); //afd is null. How come?? 
    

Пытались также следующее (на всякий случай)

expansionFile.getAssetFileDescriptor("videos/sample1.mp4"). But it gives the same nullpointerexception. 

Пожалуйста, помогите людям.

Спасибо!

Редактировать: Возможно, я нашел источник ошибки. Но все еще не знаю, как это исправить. Фактически, сам файл extensionFile содержит нулевые значения.

expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this, 
      6, 0);  
Log.i("expansionFile: ", ""+expansionFile); //--> expansionFile is null 

Кроме того, была еще одна ошибка в LogCat я мог бы пропускал раньше: -> «Не Zip архив», который ведет свое существование метода addPatchFile (zipFilename) в ZipResourceFile.java.

int header = read4LE(f); 
    if (header == kEOCDSignature) { 
     Log.i(LOG_TAG, "Found Zip archive, but it looks empty"); 
     throw new IOException(); 
    } else if (header != kLFHSignature) { 
     Log.v(LOG_TAG, "Not a Zip archive"); 
     throw new IOException(); 
    } 

Теперь, когда я попытался отслеживании метод-звонки, я узнал, что мой

APKExpansionSupport.getAPKExpansionZipFile (...) в свою очередь, вызывает getResourceZipFile (expansionFiles) которые, в свою очередь, вызывает addPatchFile (expandFilePath), где он показывает журнал -> «Не zip-архив», как показано выше в фрагменте кода. Поэтому я предполагаю, что файл .obb должен быть преобразован в zip-файл (нулевое сжатие снова), которое я сделал, и переименовал файл obb в «main.6.com.example.expansion.downloader.obb.zip» (и по понятным причинам. Я также переименовал obb-путь в код в < ...>. obb.zip). Сделав все это, теперь extensionFile не содержит нулевого значения, но все же мой AssetFileDescriptor afd присваивается значение null. Ну, очевидно, этот подход кажется мне некорректным (как я думаю, файл .obb не должен быть заархивирован до < ..>. Obb.zip. Также попробовали с тем же именем obb-файла после zipping (т. Е. Без каких-либо .zip расширение). Это тоже не сработало).

Пожалуйста, помогите.

P.S .: Посмотрел по всей сети «stackoverflow» &, но ни один из них не помог.

+1

Насколько я понимаю, файл .obb совпадает с zip-файлом, а это значит, что если вы используете инструмент JOBB в zip-файле, вы выполняете двойное сжатие. Вы должны либо заархивировать, либо запустить инструмент JOBB. Надеюсь это поможет. –

ответ

1

У меня был ограниченный успех, используя класс StorageManager для доступа к объекту, созданному JOBB. Я не пробовал класс APKExpansionSupport. StorageManager встроен в библиотеки Android.

Я говорю об ограниченном успехе, потому что большую часть времени onObbStateChange() не вызывается, когда я монтирую obb с помощью mountObb(). Тем не менее, похоже, что obb монтируется. Я вижу это в файловой системе, и я могу вызвать getMountedObbPath() для доступа к ней.

Я также иногда не могу получить доступ к файлам в пределах obb. Он монтируется, но затем кажется пустым (что привело меня к вашему сообщению). Это, по крайней мере, однажды, исправлено после восстановления и загрузки нового obb. Я понятия не имею, почему, но на данный момент я еще раз не могу получить доступ к содержимому.

0

Maybe this post will help you Я предполагаю, что все это касается ContentProvider, и вы не можете просто получить URI для видеофайлов внутри obb zip без дополнительной кодировки. Также проверьте this post - возможно, вы пропустили что-то в пути к файлу.