I am receiving an error (setDataSource failed 0x8000000) when using MediaMetadataRetriever to retrieve the artist and title of an mp3 file, but I cannot understand why. When running on my emulator, it works perfectly, but crashes when running on my Samsung S4. I know the directory is correct (/storage/extSdCard/Music/) because I can load file names without any problem whatsoever. Can someone please explain why this isn't working?
if (songs.size() != 0){
for (int x = 0; x < songs.size(); x++){
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(SD_PATH + songs.get(x));
String tagTitle =
mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String tagArtist =
mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
taggedSongs.add(tagArtist + " - " + tagTitle);
}
ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.song_item,taggedSongs);
EDIT:
Logcat:
09-15 10:55:02.805: E/AndroidRuntime(1292): FATAL EXCEPTION: main
09-15 10:55:02.805: E/AndroidRuntime(1292): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jimmy.jimp3/com.jimmy.jimp3.MainActivity}: java.lang.RuntimeException: setDataSource failed: status = 0x80000000
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread.access$700(ActivityThread.java:154)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.os.Handler.dispatchMessage(Handler.java:99)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.os.Looper.loop(Looper.java:137)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread.main(ActivityThread.java:5306)
09-15 10:55:02.805: E/AndroidRuntime(1292): at java.lang.reflect.Method.invokeNative(Native Method)
09-15 10:55:02.805: E/AndroidRuntime(1292): at java.lang.reflect.Method.invoke(Method.java:511)
09-15 10:55:02.805: E/AndroidRuntime(1292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
09-15 10:55:02.805: E/AndroidRuntime(1292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
09-15 10:55:02.805: E/AndroidRuntime(1292): at dalvik.system.NativeStart.main(Native Method)
09-15 10:55:02.805: E/AndroidRuntime(1292): Caused by: java.lang.RuntimeException: setDataSource failed: status = 0x80000000
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.media.MediaMetadataRetriever.setDataSource(Native Method)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:66)
09-15 10:55:02.805: E/AndroidRuntime(1292): at com.jimmy.jimp3.MainActivity.taggedPlaylist(MainActivity.java:78)
09-15 10:55:02.805: E/AndroidRuntime(1292): at com.jimmy.jimp3.MainActivity.onCreate(MainActivity.java:47)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.Activity.performCreate(Activity.java:5255)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
09-15 10:55:02.805: E/AndroidRuntime(1292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
09-15 10:55:02.805: E/AndroidRuntime(1292): ... 11 more
In my case the problem was caused by my forgetting to set INTERNET permission while my app requires access to the internet. Rookie error.
Puting the setDataSource() method in try-catch block solved the issue.
try {
metaRetriver.setDataSource(AudioPath);
//
} catch (Exception e) {
//
}
User contributions licensed under CC BY-SA 3.0