6

SO でこのような質問がいくつかあることは知っていますが、それらはファイルを再生する前に抽出することに関連しています。

ここの Android ドキュメントでは、解凍せずに .zip ファイルから直接ファイルを再生できることが説明されています。

ヒント: メディア ファイルを ZIP にパッケージ化する場合は、ZIP を解凍しなくても、オフセットと長さの制御 ( MediaPlayer.setDataSource()や SoundPool.load() など) を使用してファイルでメディア再生呼び出しを使用できます。これを機能させるには、ZIP パッケージを作成するときに、メディア ファイルに対して追加の圧縮を実行しないでください。たとえば、zip ツールを使用する場合は、-n オプションを使用して、圧縮しないファイル サフィックスを指定する必要があります。

zip -n .mp4;.ogg main_expansion media_files

ZipEntry(圧縮されていない) zip パッケージを作成しましたが、 a からa に移動する方法がわかりFileDescriptorません。それ以上の説明もありません。FileDescriptorzip ファイルを解凍せずに を取得するにはどうすればよいですか?

4

4 に答える 4

4

アプリで APK Expansions を使用しない場合でも、APK Expansion Zip Libraryを使用してこれを行うことができます。

このドキュメントに従ってライブラリを入手してください: Using the APK Expansion Zip Library

お気に入りの zip ツールを使用して、サウンド ファイルを圧縮せずに圧縮します。

このコードを使用して音楽をロードします。

ZipResourceFile expansionFile = new ZipResourceFile("myZipFile.zip");
AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor("myMusic.mp3");
try {
    mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor());
    mediaPlayer.prepare();
    mediaPlayer.start();
}
catch (IOException e) {
    // Handle exception
}
于 2014-08-20T11:11:36.870 に答える
1
try {
    ZipFile zf= new ZipFile(filename);
    ZipEntry ze = zip.getEntry(fileName);
    if (ze!= null) {
        InputStream in = zf.getInputStream(ze);
        File f = File.createTempFile("_AUDIO_", ".wav");
        FileOutputStream out = new FileOutputStream(f);
        IOUtils.copy(in, out);
        // play f
    }
} catch (IOException e) {

}

重複する可能性のある質問

于 2013-02-25T04:46:26.850 に答える