Я реализовал службу загрузки файлов расширения APK и все это с http://developer.android.com/google/play/expansion-files.html
Я могу загрузить файл расширения APK, и я могу увидеть этот файл, используя приведенный ниже код
try {
ZipResourceFile expansionFile = APKExpansionSupport
.getAPKExpansionZipFile(this, 3, 0);
ZipEntryRO[] zip = expansionFile.getAllEntries();
Log.e("", "" + zip[0].mFile.getAbsolutePath());
Log.e("", "" + zip[0].mFileName);
Log.e("", "" + zip[0].mZipFileName);
Log.e("", "" + zip[0].mCompressedLength);
AssetFileDescriptor fd = expansionFile
.getAssetFileDescriptor(zip[0].mFileName);
if (fd != null && fd.getFileDescriptor() != null) {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(fd.getFileDescriptor());
mp.start();
} else {
Log.e("", "fd or fd.getFileDescriptor() is null");
}
} catch (IOException e) {
e.printStackTrace();
}
У моего obb есть файл test.mp4
, а мой код Log.e("", "" + zip[0].mFileName);
печатает test.mp4.
Мой fd
это null
. Почему это null
? Я пытаюсь решить, но не могу.
Я просто не могу прочитать ни один файл внутри файла obb.
Без ответа Доступ к файлам внутри файла расширения obb предлагает идею, но это не так работать на меня.
Шаги по созданию файла расширения APK сообщает о распаковке содержимого из obb и затем прочтите это. Это надежно и хорошо?
Мне нужно мнение о передовой практике.
Редактировать
Мой журнал
03-01 10:36:40.848: E/(27836): zip[0].isUncompressed() : false
03-01 10:36:40.848: E/(27836): mFile.getAbsolutePath() : /storage/sdcard0/Android/obb/smart.trigger/main.3.smart.trigger.obb
03-01 10:36:40.848: E/(27836): mFileName : test.mp4
03-01 10:36:40.848: E/(27836): mZipFileName : /storage/sdcard0/Android/obb/smart.trigger/main.3.smart.trigger.obb
03-01 10:36:40.848: E/(27836): mCompressedLength : 21657598