android - 下载音频文件后,如何使用 Android MediaPlayer 播放?

标签 android android-mediaplayer

在播放歌曲时(下载后)我在 mplayer.setDataSource(fis.getFD()); 处遇到异常。为什么我在这里得到异常?

while (isDownloading) 
    {
            try
            {

                String filePath = PATH + sponser;
                FileInputStream fis = new FileInputStream(filePath);
                mplayer.setDataSource(fis.getFD() );
                mplayer.setOnPreparedListener(new OnPreparedListener()
                {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                    }
                });
                mplayer.prepare();
                mplayer.start();

                mplayer.setOnCompletionListener(new OnCompletionListener() 
                {
                    @Override
                    public void onCompletion(MediaPlayer mp) 
                    {
                    }
                });
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                isDownloading = false;
            }
    }

日志:

03-07 17:20:14.400: W/System.err(3942): java.lang.NullPointerException
03-07 17:20:14.400: W/System.err(3942):     at com.nelitemusic.MyMixes$CustomAdapter$1.onClick(MyMixes.java:399)
03-07 17:20:14.410: W/System.err(3942):     at android.view.View.performClick(View.java:3127)
03-07 17:20:14.410: W/System.err(3942):     at android.view.View$PerformClick.run(View.java:12025)
03-07 17:20:14.410: W/System.err(3942):     at android.os.Handler.handleCallback(Handler.java:587)
03-07 17:20:14.410: W/System.err(3942):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 17:20:14.420: W/System.err(3942):     at android.os.Looper.loop(Looper.java:132)
03-07 17:20:14.420: W/System.err(3942):     at android.app.ActivityThread.main(ActivityThread.java:4126)
03-07 17:20:14.420: W/System.err(3942):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 17:20:14.420: W/System.err(3942):     at java.lang.reflect.Method.invoke(Method.java:491)
03-07 17:20:14.420: W/System.err(3942):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
03-07 17:20:14.420: W/System.err(3942):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
03-07 17:20:14.420: W/System.err(3942):     at dalvik.system.NativeStart.main(Native Method)

最佳答案

像这样使用媒体播放器的数据源方法

 mediaPlayer.setDataSource(fd.getFileDescriptor(),fd.getStartOffset(), fd.getLength()); 

以避免出现问题并确保正确下载视频。

关于android - 下载音频文件后,如何使用 Android MediaPlayer 播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299615/

相关文章:

android - 继续收到 SDK 错误信息

android - 如何从 FirebaseRecyclerAdapter 或 Firebase Reference Android 中排除项目

android - 我可以在 onCreate() 和 onDestroy() 中放置 flurry 代码吗?

java - 在 Android 中播放音频时出现故障

android - 如果用户在不同的 ImageView 上滑动手指,如何检测 ImageViews 是否被触摸

android - 数据库是否存在【如何调用类】

android - MediaPlayer 播放时 ProgressBar 被阻塞

java - 媒体播放器超时异常

java - android获取当前videoview的截图

android - 使用三星默认媒体播放器的媒体按钮广播