Файл расширения Android APK, невозможно прочитать файлы .wav

Я разрабатываю приложение, которое должно воспроизводить звуки и иметь большой набор звуковых файлов в формате .wav размером около 1 ГБ. Я следовал официальной документации по созданию файла расширения.

Сначала я сделал файл .zip с нулевым сжатием, все файлы .wav находятся в этих файлах (без какой-либо подпапки. Это main.1.package содержит все звуковые файлы). Затем я переименовал папку .zip в .obb. После этого я поместил этот файл .obb в папку приложений в папке obb общего хранилища (com.moinul.app — это имя моего пакета, поэтому имя папки было таким, а файл расширения был назван main.1.com.moinul.app .obb )

Проблема в том, что когда я пытаюсь прочитать файлы из моих файлов расширения, я получаю исключения с нулевым указателем:

try
    {
        String param = (String) v.getTag();

        ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, 1, 0);
        AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("p25_1.wav");

        MediaPlayer mPlayer = new MediaPlayer();
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setDataSource(fd.getFileDescriptor());
        mPlayer.prepare();
        mPlayer.start();
    }
    catch (Exception e)
    {
        Log.w(TAG,  e.getMessage() + "");
        e.printStackTrace();
    }

Я получаю исключения, говорящие, что fd имеет значение null. Любая помощь будет оценена по достоинству. Спасибо


person aaa111    schedule 12.05.2017    source источник


Ответы (3)


Попробуйте использовать: AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("assets/p25_1.wav");

person Dungnbhut    schedule 12.05.2017
comment
Но внутри папки с активами нет. Позвольте мне попробовать это в любом случае. - person aaa111; 12.05.2017
comment
То же не повезло к сожалению. - person aaa111; 12.05.2017

Попробуйте `тест открытого класса расширяет активность {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    String TAG = "Test";
    Context context = this;
    try {
        MediaPlayer mediaPlayer = new MediaPlayer();

        ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, 1, 0);
        AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor("assets/p25_1.wav");

        if (assetFileDescriptor != null) {
            final FileInputStream fis = assetFileDescriptor.createInputStream();
            if (fis != null) {
                mediaPlayer.setDataSource(fis.getFD());
                fis.close();
                mediaPlayer.prepare();
                mediaPlayer.start();
            } else {
                Log.w(TAG, "/fis: null");
            }
        }

    } catch (Exception e) {
        Log.w(TAG, e.getMessage() + "");
    }
}

}`

person Dungnbhut    schedule 12.05.2017
comment
Если мой код не работает, возможно, вам следует проверить расширение файла. Я надеюсь, что это может помочь вам. stackoverflow.com/questions/18929273/ - person Dungnbhut; 12.05.2017

Итак, это сработало, наконец. После замены на:

 AssetFileDescriptor fd = expansionFile.getAssetFileDescriptor("Sounds/p25_1.wav");

Теперь это работает. Странно, что мне пришлось добавить Звуки, которые были именем папки перед сжатием (я на самом деле сжал эту папку, и все .wav находятся под ней). Я думаю, что компрессор сделал еще одну подпапку внутри .zip.

В любом случае спасибо за помощь.

person aaa111    schedule 12.05.2017