Android扩展文件。

时间:2013-04-26 12:30:41

标签: android apk

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

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

任何人都有这个想法。 请帮帮我

2 个答案:

答案 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 "*/.*"