setDataSource 失败 0x8000000。

4
我使用MediaMetadataRetriever来获取mp3文件的艺术家和标题时,出现错误(setDataSource failed 0x8000000),但我不知道原因。当在模拟器上运行时,它可以完美地运行,但在我的三星S4上运行时会崩溃。我知道目录是正确的(/storage/extSdCard/Music/),因为我可以毫无问题地加载文件名。请问有人可以解释一下为什么这不起作用吗?
        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);

编辑:

日志记录:

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

抱歉,我刚刚编辑了我的帖子以包含它。 - user184994
我没有写那个权限,不需要吧?就像我说的,在我的模拟器上它可以工作,所以我不认为那是问题所在。如果我有一个没有标签的文件,会导致这个问题吗?我只有两个带标签的文件在我的模拟器上,但是在我的手机上有几个没有标签的文件。 - user184994
2
问题已解决,原因是一些文件没有任何标签。我现在还不能回答自己的问题,因为我的声望还不够,所以稍后会更新。 - user184994
9
当说“it was caused by files that don't have any tags.”时,意思是由于没有任何标签的文件引起了某种问题或情况。 - reiley
1
嘿,你现在能回答你的问题吗? - Chirag Savsani
显示剩余2条评论
2个回答

1
在我的情况下,问题是由于我忘记设置INTERNET权限而导致的,而我的应用程序需要访问互联网。初学者错误。

-2
将setDataSource()方法放在try-catch块中解决了这个问题。
  try {
            metaRetriver.setDataSource(AudioPath);
           //
        } catch (Exception e) {
            //
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接