2012-09-06 206 views
1

在播放歌曲(下載後)時,我在mplayer.setDataSource(fis.getFD());發生異常。爲什麼我在這裏得到例外?下載音頻文件後,如何使用Android MediaPlayer播放它?

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

的logcat:

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) 

回答

0

下載歌曲後,你必須運行媒體掃描儀。然後你可以播放該歌曲。

//Broadcast the Media Scanner Intent to trigger it 
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" 
           + Environment.getExternalStorageDirectory()))); 

MediaScanner爲新文件掃描Android SD卡。

+0

我在其他活動中下載歌曲,並希望參與此活動。 – bkshukla

+0

下載歌曲後,您必須掃描SD卡才能播放該歌曲。 –

2

使用媒體播放器這樣的

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

數據源的方法來避免這些問題,並確保該視頻是正確下載。

相關問題