Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 访问obb扩展文件中的文件_Android_Expansion Files_Apk Expansion Files - Fatal编程技术网

Android 访问obb扩展文件中的文件

Android 访问obb扩展文件中的文件,android,expansion-files,apk-expansion-files,Android,Expansion Files,Apk Expansion Files,我遵循所有的官方扩展文件指南,但我找不到它。我无法访问所需的包含的obb文件 我需要6个音频文件(80Mb),我将其“存储”(未压缩)在zip文件中,并重命名为“main.2001.test.expansion.proj.obb”,存储在“/mnt/sdcard/Android/obb/test.expansion.proj/”中 我将尝试访问这些文件 String mainFileName = Helpers.getExpansionAPKFileName(this,true,2001); i

我遵循所有的官方扩展文件指南,但我找不到它。我无法访问所需的包含的obb文件

我需要6个音频文件(80Mb),我将其“存储”(未压缩)在zip文件中,并重命名为“main.2001.test.expansion.proj.obb”,存储在“/mnt/sdcard/Android/obb/test.expansion.proj/”中

我将尝试访问这些文件

String mainFileName = Helpers.getExpansionAPKFileName(this,true,2001);
if(!Helpers.doesFileExist(this, mainFileName, 27959282L, false))
{
    //download
} else {
    Log.d("test_file","file exist");
}

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null)
{
    ZipEntryRO[] ziro = expansionFile.getAllEntries();
    for (ZipEntryRO entry : ziro) {
        Log.d("test_files_zip", "fileZip filename: "+entry.getZipFileName());
        try{
            AssetFileDescriptor ro = entry.getAssetFileDescriptor();
            Log.d("test_files_zip", "--fileZip getfiledescriptor.tostring: "+ro.getFileDescriptor().toString());
            Log.d("test_files_zip", "--fileZip createinputstring.tostring: "+ro.createInputStream().toString());

            AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor(entry.getZipFileName()+"/audio02.mp3");
            if(assetFileDescriptor!=null) {
                Log.d("test_files_mp3", "length: "+assetFileDescriptor.getLength()); //checking it exists
            }
        }catch (IOException e){ Log.e("test_exp","IoExcp: "+e.getMessage()); }
    }
}
在->assetFileDescriptor=expansionFile.getAssetFileDescriptor(…);我已经尝试了所有我想出来的东西,在不同的地方找到了,但是我无法拿这个文件。 如果文件在zip中,有没有办法从文件名中获取该文件

应用程序应该以特定的顺序播放这些文件,我们不希望解压缩这些文件并将其“公开”


编辑。回答我自己

我发现,这是我第一次读它时不理解的一句话,或者我只是错过了它

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null){
        FileDescriptor fd = expansionFile.getAssetFileDescriptor("audio_01.mp3");
        //or
        InputStream is = expansionFile.getInputStream("audio_01.mp3");
    }
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null){
        FileDescriptor fd = expansionFile.getAssetFileDescriptor("audio_01.mp3");
        //or
        InputStream is = expansionFile.getInputStream("audio_01.mp3");
}

正如Aarolama Bluenk所建议的,下面是答案代码(repited)

我发现,这是我第一次读它时不理解的一句话,或者我只是错过了它

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null){
        FileDescriptor fd = expansionFile.getAssetFileDescriptor("audio_01.mp3");
        //or
        InputStream is = expansionFile.getInputStream("audio_01.mp3");
    }
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,2001,2001);
if(expansionFile!=null){
        FileDescriptor fd = expansionFile.getAssetFileDescriptor("audio_01.mp3");
        //or
        InputStream is = expansionFile.getInputStream("audio_01.mp3");
}

可能这个asnwer会对您有所帮助不,它是我使用过的源代码之一,但与读取obb中的文件无关。我尝试了
AssetFileDescriptor fd=expansionFile.getAssetFileDescriptor(zip[0].mFileName)。但是
fd
为空。您能帮助我吗?您是否尝试使用真实的文件名而不是zip[0].mFileName?当我使用此代码时,它从ZipResourceFile.class返回一个错误“Not a zip archive”,我收到一个类似“Create class ApkeExpansionSupport”的错误。我是否需要添加/下载任何库。请帮帮我。