Установка исходного источника данных в синглтон медиаплеера

У меня есть шанс настроить медиаплеер как синглтон, чтобы им можно было управлять из различных действий в моем проекте. Многочисленные исследования привели меня к следующему коду.

if (current_player == null)
{
    try
    {
        current_player = MusicPlayer.getInstance();
        AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.mytune);
        current_player.setDataSource(afd.getFileDescriptor());
        current_player.prepare();
        current_player.setLooping(true);
        current_player.start();
        afd.close();
}
catch (IllegalArgumentException e) { Log.e("IllegalArgumentException", "error: " + e.getMessage(), e);   } 
catch (IllegalStateException e) {Log.e("IllegalStateException", "error: " + e.getMessage(), e); } 
catch (IOException e) {Log.e("IOException", "error: " + e.getMessage(), e); } 
catch (Exception e){    Log.e("Main media player", "error: " + e.getMessage(), e);
        }

Я знаю, что
1. создается MediaPlayer
2. AssetFileDescriptor предназначен для правильного файла

Код завершается сбоем в строке .setDataSource с ошибкой IOException
: сбой setDataSourceFD.: status=0x80000000

Код намеренно похож на многие примеры, показанные на различных форумах, которые утверждают, что он должен работать. Чтобы было ясно, я доказал, что

current_player= MediaPlayer.create(this, R.raw.mytune);

работает отлично.

Буду очень благодарен за любые предложения.


person Squiggles    schedule 02.03.2012    source источник


Ответы (1)


Поместите файл в каталог assets. Правильная строка AssetFileDescriptor afd =... на

AssetFileDescriptor afd = context.getAssets().openFd(fileName);
current_player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength() );
person Report Error    schedule 02.03.2012
comment
Вы решили проблему для меня. Файл может находиться в каталоге res/raw OK. Проблема в том, что вы должны использовать .setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); - person Squiggles; 03.03.2012