在我的应用程序中,我有很多媒体文件(.mp4)和 pdf 文件,所以我上传了扩展的 apk 文件。
但我不知道如何将视频文件从扩展文件(obb 文件)播放到视频视图并从扩展文件打开 PDF 文件。
任何人都知道。请帮我
您可以使用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
有关设置扩展文件的更多详细信息和代码,请阅读如何设置 Android 应用程序以支持扩展文件。
使用 google 提供的 zip 工具(com.android.vending.zipfile)直接从扩展文件中读取电影文件和其他内容实际上非常容易。
首先使用库中提供的方法获取扩展文件,参数是整数,代表你的主要扩展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);`
还要确保您不压缩 zip 中的视频以使其正常工作!例如不压缩 .mp4 文件:
zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*"