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:

https://github.com/openframeworks/openFrameworks/blob/master/addons/ofxAndroid/ofAndroidLib/src/cc/openframeworks/OFAndroidSoundPlayer.java

questionAnswers(6)

yourAnswerToTheQuestion