J'essaie de lire un fichier audio mp3 à partir de la carte SD en utilisant le chemin d'accès et le nom du fichier audio pour obtenir son Uri.
J'ai une Spinner
remplie avec les noms de pistes stockés dans la carte SD. Quand un élément est sélectionné, le code suivant sera exécuté:
final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
OnItemSelectedListener listener = new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
TextView tv = (TextView) selectedItemView;
File file = new File(uri.getPath() + "/" + tv.getText().toString());
Log.i(TAG, "------------- PATH : " + file.getAbsolutePath());
Uri uri = Uri.fromFile(file);
MediaPlayer mP = new MediaPlayer();
try {
mP.setDataSource(context, uri);
mP.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mP.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Je reçois les erreurs suivantes:
08-21 16:16:37.099: I/MusicFileActivity(3940): ------------- PATH : /external/audio/media/antazirouka
08-21 16:16:37.159: W/MediaPlayer(3940): info/warning (1, 26)
08-21 16:16:37.159: E/MediaPlayer(3940): error (1, -4)
08-21 16:16:37.159: W/System.err(3940): Java.io.IOException: Prepare failed.: status=0x1
08-21 16:16:37.169: W/System.err(3940): at Android.media.MediaPlayer.prepare(Native Method)
08-21 16:16:37.169: W/System.err(3940): at com.example.project.MusicFileActivity$1.onItemSelected(MusicFileActivity.Java:84)
08-21 16:16:37.169: W/System.err(3940): at Android.widget.AdapterView.fireOnSelected(AdapterView.Java:871)
08-21 16:16:37.169: W/System.err(3940): at Android.widget.AdapterView.access$200(AdapterView.Java:42)
08-21 16:16:37.169: W/System.err(3940): at Android.widget.AdapterView$SelectionNotifier.run(AdapterView.Java:837)
08-21 16:16:37.169: W/System.err(3940): at Android.os.Handler.handleCallback(Handler.Java:587)
08-21 16:16:37.169: W/System.err(3940): at Android.os.Handler.dispatchMessage(Handler.Java:92)
08-21 16:16:37.169: W/System.err(3940): at Android.os.Looper.loop(Looper.Java:123)
08-21 16:16:37.169: W/System.err(3940): at Android.app.ActivityThread.main(ActivityThread.Java:3687)
08-21 16:16:37.169: W/System.err(3940): at Java.lang.reflect.Method.invokeNative(Native Method)
08-21 16:16:37.169: W/System.err(3940): at Java.lang.reflect.Method.invoke(Method.Java:507)
08-21 16:16:37.169: W/System.err(3940): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:867)
08-21 16:16:37.169: W/System.err(3940): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:625)
08-21 16:16:37.169: W/System.err(3940): at dalvik.system.NativeStart.main(Native Method)
Est-ce que quelqu'un a une idée à ce sujet? Merci d'avance :)
Mec tu as placémP.prepare();
sur la mauvaise ligne Tu dois l'appeler aprèsmP.setDataSource(context, uri);
function Et avantmp.start();
Aussi, n'essayez pas de créer plusieurs instances de MediaPlayer . Faites-en un et utilisez reset () function à chaque fois avant de commencer.
S'il vous plaît voir ce lien pour plus d'aide.
Avez-vous cette permission dans AndroidManifest.xml?
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
Incrorecter le nom du fichier ou le chemin du fichier qui a défini in.setDataSource(fileName)
.
Ou mauvais appel .prepare()
(DOIT APPELER .setDataSource() before .prepare()
) .Voir la réponse @TheLittleNaruto.