Я могу воспроизвести локальный mp3, если я использую статический метод MediaPlayer.create(context, id), но он не работает, если я использую нестатический метод MediaPlayer.setDataSource(String). Случилось так, что я получаю синхронное исключение, когда я вызываю MediaPlayer.prepare():
prepare exceptionjava.io.IOException: Prepare failed.: status=0x1
Вот мой код (пропущенный журнал):
String filename = "android.resource://" + this.getPackageName() + "/raw/test0";
mp = new MediaPlayer();
try { mp.setDataSource(filename); } catch (Exception e) {}
try { mp.prepare(); } catch (Exception e) {}
mp.start();
Обратите внимание, что я не получаю ошибки в файле, который не найден или что-то еще. Полное имя файла - test0.mp3, и я помещаю его в каталог/res/raw/в Eclipse.
Я предполагаю, что я неправильно установил путь, но все примеры, которые я нашел в Интернете, используют версию FileDescriptor для setDataPath вместо String версии setDataPath.
EDIT: я также могу воспроизвести локальный mp3, если я использую метод MediaPlayer.setDataSource(FileDescriptor) и поместил файлы в каталог/assets/в Eclipse.
EDIT # 2: Я принял ответ, что это невозможно, но потом понял, что библиотека, которую я использую (openFrameworks), фактически использует метод String для загрузки файла. См. Здесь: