2013-06-04 62 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可以此帮助您