在我的应用程序上我有很多媒体文件(.mp4)和pdf文件,所以我上传了带扩展的apk文件。
但我不知道如何从扩展文件(obb文件)播放视频文件到视频视图,并从扩展文件中打开PDF文件。
任何人都有这个想法。 请帮帮我
答案 0 :(得分: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包时,不得对媒体文件执行额外压缩。例如,使用zip工具时,应使用-n选项指定不应压缩的文件后缀:
zip -n .mp4;.ogg main_expansion media_files
有关设置扩展文件的更多详细信息和代码,请阅读jsfiddle。
答案 1 :(得分:0)
使用谷歌提供的zip工具(com.android.vending.zipfile),它实际上很容易直接从扩展文件中读取电影文件和其他内容。
首先使用库中提供的方法获取扩展文件,paremeters是整数,代表你的主要扩展apk版本(你需要扩展包的apk版本首次添加)和补丁apk版本。
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());
其他强>
对于所有其他内容(如图像),您只需获取zipresourcefile的输入流:
expansionFile.getInputStream(pathToFileInsideZip);`
另外请确保您不压缩拉链中的视频以使其正常工作! 例如,不压缩.mp4文件:
zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*"