Папка активов Android: всегда занимает первый файл в алфавитном порядке - PullRequest
2 голосов
/ 17 октября 2010

Я новичок в программировании на Java / Android, поэтому, пожалуйста, наберитесь терпения.

Я пытаюсь воспроизвести mp3, который находится в папке активов. Я знаю, что есть другой способ с папкой / res / raw /, но используйте папку assets, потому что позже я попытаюсь получить доступ к файлу по строке.

Этот код работает для воспроизведения mp3-файла:

        try
    {
        MediaPlayer mp = new MediaPlayer(); 
        FileDescriptor sfd = getAssets().openFd("song.mp3").getFileDescriptor(); 


        mp.setDataSource(sfd); 
        mp.prepare(); 
        mp.start();
    }
    catch(Exception e) {}

Теперь проблема: в той же папке ресурсов хранится еще один mp3-файл. Хотя я указываю название mp3, чтобы использовать его, возьмите то, что идет первым в алфавите. Например. другой файл называется «music.mp3», он воспроизводит этот. Переименовав его в «worldmusic.mp3», он воспроизведет «song.mp3». Переименуйте "worldmusic.mp3" обратно в "music.mp3", он снова возьмет этот mp3. Другой тест: переименование «song.mp3» во что-то другое, чтобы приложение могло найти то, что указано в приведенном выше коде, приведет к тому, что песня не будет воспроизведена. Таким образом, это означает, что название песни должно существовать, хотя она занимает произвольную песню сначала в алфавите.

Я тестирую с эмулятором AVD Eclipse. Но я думаю, что поведение будет таким же на реальном устройстве.

Кто-нибудь имеет представление об этой проблеме?

Ответы [ 2 ]

0 голосов
/ 16 октября 2011

Не знаю почему, но синтаксис URI, похоже, не работает для ресурсов. Попробуйте вместо этого получить AssetFileDescriptor, как ответили на соответствующий вопрос:

Воспроизведение аудиофайла из каталога ресурсов

0 голосов
/ 18 октября 2010

Я не верю, что использование FileDescriptor является правильным способом сделать это. Попробуйте использовать .create() и Uri вместо:

MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();
...