Android MediaPlayer – 播放歌曲时出错(1,-4)

我正在尝试从SD卡播放mp3音频文件,使用音频文件的路径和文件名来获取其Uri.

我有一个Spinner,其中填充了存储在SD卡中的曲目名称.
选择项目后,将执行以下代码

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();
            }

        }
    };

我收到以下错误

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)

有没有人对它有任何想法?
提前致谢 :)

解决方法

老兄你放了mP.prepare();错线
你需要在mP.setDataSource(context,uri)之后调用它;功能
在mp.start()之前;

也不要尝试制作几个MediaPlayer实例.在开始之前每次创建一个并使用reset()函数.

请参阅this link获取更多帮助.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...