MediaPlayer.setDataSource (String) não funciona com arquivos locais
Eu sou capaz de reproduzir um mp3 local se eu usar o método estático MediaPlayer.create (context, id), mas não funcionará se eu usar o método não estático MediaPlayer.setDataSource (String). O que está acontecendo é que estou recebendo uma exceção síncrona quando ligo para MediaPlayer.prepare ():
prepare exceptionjava.io.IOException: Prepare failed.: status=0x1
Aqui está o meu código (registro omitido):
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();
Observe que não estou recebendo erros sobre o arquivo não encontrado ou algo assim. O nome completo do arquivo é test0.mp3 e eu o coloco no diretório / res / raw / no Eclipse.
Suponho que estou definindo o caminho incorretamente, mas todos os exemplos que encontro on-line usam a versão FileDescriptor de setDataPath em vez da versão String de setDataPath.
EDIT: Eu também sou capaz de tocar um mp3 local se eu usar o método MediaPlayer.setDataSource (FileDescriptor) e colocar os arquivos no diretório / assets / no Eclipse.
EDIÇÃO 2: Aceitei a resposta de que isso não é possível, mas percebi que a biblioteca que estou usando (openFrameworks) realmente usa o método String para carregar um arquivo. Veja aqui: