2013-06-04 66 views
0

問題來源於此梅索德:無法播放從路徑文件中的音頻文件(MP3播放)與MediaPlayer的

public void playSound(String pathSound) { 

     Log.i("Playsound pathFile", "Path:"+pathSound); 
     if(mp != null) 
     { 
      mp.stop(); 
      mp.release(); 
      mp = null; 
     } 

     mp = new MediaPlayer(); 
     try{ 
     mp.setDataSource(pathSound);    
     mp.prepare(); 
     }catch(Exception e){ 
      Log.i("PLAY SOUND ERROR",e.toString()); 
     } 
     mp.start(); 
    } 
在我的應用程序

我下載的聲音文件在運行時,並存儲pathFiles在SQLite的話,我可以用它。

聲音文件的路徑爲:

PathSound =「/數據/數據/ com.example.mypackage /文件夾/原糖/ title.mp3」,我不知道我是否有權存儲此文件在這裏。

錯誤,那是給我:

06-04 15:26:18.420: E/MediaPlayer(1043): error (1, -2147483648) 
06-04 15:26:18.420: W/System.err(1043): java.io.IOException: Prepare failed.: status=0x1 
06-04 15:26:18.430: W/System.err(1043):  at android.media.MediaPlayer.prepare(Native Method) 
06-04 15:26:18.430: W/System.err(1043):  at com.example.databasesqlitetest.ItemActivity.playSound(ItemActivity.java:187) 
06-04 15:26:18.439: W/System.err(1043):  at com.example.databasesqlitetest.ItemActivity$2.onClick(ItemActivity.java:91) 
06-04 15:26:18.439: W/System.err(1043):  at android.view.View.performClick(View.java:3540) 
06-04 15:26:18.449: W/System.err(1043):  at android.view.View$PerformClick.run(View.java:14167) 
06-04 15:26:18.449: W/System.err(1043):  at android.os.Handler.handleCallback(Handler.java:605) 
06-04 15:26:18.459: W/System.err(1043):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-04 15:26:18.459: W/System.err(1043):  at android.os.Looper.loop(Looper.java:137) 
06-04 15:26:18.459: W/System.err(1043):  at android.app.ActivityThread.main(ActivityThread.java:4560) 
06-04 15:26:18.459: W/System.err(1043):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-04 15:26:18.459: W/System.err(1043):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-04 15:26:18.469: W/System.err(1043):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-04 15:26:18.469: W/System.err(1043):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-04 15:26:18.469: W/System.err(1043):  at dalvik.system.NativeStart.main(Native Method) 
06-04 15:26:18.469: E/MediaPlayer(1043): start called in state 0 
06-04 15:26:18.469: E/MediaPlayer(1043): error (-38, 0) 
06-04 15:26:18.479: E/MediaPlayer(1043): Error (-38,0) 
+0

第一個日誌的'(新文件(pathSound))存在()'你也可以考慮下載它的結果而不是外部存儲(即使是臨時測試),您可以在其中找到它並嘗試使用文件管理器應用程序播放它,以查看它是否與Android兼容。 –

+0

是的,我要我的聲音文件保存到外部存儲,並添加此權限: <使用許可權的android:NAME =「android.permission.WRITE_EXTERNAL_STORAGE」 /> 認爲 @克里斯 - 斯特拉頓 – mouhcine

回答

-2

嘗試初始化它是這樣的:

MediaPlayer mp = MediaPlayer.create(context, R.raw.title); 
mp.start(); 

但是你需要把資源的title.mp3 /生。

我這樣做,它完美的作品。

+1

這些聲音文件,我從服務器下載它,所以我不能使用它! – mouhcine

0

代碼從地址

private void playSong(int position) { 

    HashMap<String, String > map= PlayListActivity.list.get(position); 

    Uri myUri = Uri.parse(map.get("songsUrl"));// "http://searchgurbani.com/audio/sggs/1.mp3"); 

    if (!isPlaying) 
    {   
     isPlaying = true; 

     mp = new MediaPlayer(); 

     try { 

      mp.reset(); // new one 

      mp.setDataSource(AudioPlayer.this, myUri); 

      //mp.prepareAsync(); 

      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

      mp.prepare(); // don't use prepareAsync for mp3 playback 

      mp.start(); 

      String songTitle = map.get("songsName"); 
      songTitleLabel.setText(songTitle); 

      songProgressBar.setProgress(0); 
      songProgressBar.setMax(100); 
      songTitleLabel.setSelected(true); 

      // Updating progress bar 
      updateProgressBar(); 

     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
    else 
    { 
     isPlaying = false; 

     //mHandler.removeCallbacks(mUpdateTimeTask); 

     mp.release();// stop Playing 

     mp = null; 
    } 

} 

代碼播放MP3從SD卡播放MP3

public void playSong(int songIndex) { 

    try { 

     mp.reset(); 

     mp.setDataSource(SongsList.songsList.get(songIndex).get("songPath")); 
     mp.prepare(); 
     mp.start(); 

     String songTitle = SongsList.songsList.get(songIndex).get("songTitle"); 
     songTitleLabel.setText(songTitle); 

     songTitleLabel.setSelected(true);// i think this is extra.. 
     // Changing Button Image to pause image 
     btnPlay.setBackgroundResource(R.drawable.pause_btn); 

     // set Progress bar values 
     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 

     // Updating progress bar 
     updateProgressBar(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

,並添加外部permision讀取文件。

0

如果你正在緩衝用戶prepareAsync而不是準備和啓動媒體播放器上OnPreparedListener可以此幫助您