1

在我的应用程序中,我有很多媒体文件(.mp4)和 pdf 文件,所以我上传了扩展的 apk 文件。

但我不知道如何将视频文件从扩展文件(obb 文件)播放到视频视图并从扩展文件打开 PDF 文件。

任何人都知道。请帮我

4

2 回答 2

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

有关设置扩展文件的更多详细信息和代码,请阅读如何设置 Android 应用程序以支持扩展文件

于 2015-04-26T07:08:54.613 回答
0

使用 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 "*/.*"
于 2014-09-24T19:25:50.043 回答