[英]android play sound from sd-card
我需要播放SD卡中的聲音。 我有必須執行此操作的方法,但是它不起作用。
當我使用這種方法時:
public class AudioPlayService extends Service
{
MediaPlayer mMediaPlayer;
..............
public void soundplay(String adr)
{
mMediaPlayer = new MediaPlayer();
try
{
if (mMediaPlayer.isPlaying())
{
mMediaPlayer.reset();
}
mMediaPlayer.setDataSource(adr);
mMediaPlayer.prepare();
} catch (IOException e)
{
}
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mp.release();
mp = null;
}
});
}
其中String adr-它是sd上文件的絕對路徑。
然后我稱之為:
AudioPlayService s = new AudioPlayService();
s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3");
我得到一個錯誤的:
12-09 13:04:13.829: E/MediaPlayer(16997): error (1, -2147483648)
12-09 13:04:13.829: E/MediaPlayer(16997): start called in state 0
12-09 13:04:13.829: E/MediaPlayer(16997): error (-38, 0)
12-09 13:04:13.839: E/MediaPlayer(16997): Error (-38,0)
player.start()
放在try,catch塊中。 因為如果播放器沒有准備好歌曲,您仍然在調用start方法.start方法僅在播放准備好后才調用,這意味着准備成功了。另一件事是您必須在播放器不再播放時釋放媒體播放器。有這么多玩家對象在后台運行。
由於某些原因,您的setDataSource()
或Prepare()
失敗。 因此,在異常之后,由於播放器未處於“准備就緒”狀態, start()
給出了錯誤。 在catch塊中添加打印語句以了解異常。 並將start()
移到try catch塊中。
mMediaPlayer = new MediaPlayer();
try
{
if (mMediaPlayer.isPlaying())
{
mMediaPlayer.reset();
}
mMediaPlayer.setDataSource(adr);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IOException e)
{
e.printStackTrace();
}
我自己嘗試了您的代碼:
當我放"sdcard/1.mp3"
時,我的工作正常
您確保路徑正確與否
s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3");
注意:如果你想使你的方法soundplay
以便停止以前的聲音和播放新的音頻文件的話,最好將not
以perfom這一點,方法內
mMediaPlayer = new MediaPlayer();
將此放置在構造函數中。 否則,每次調用s.soundplay(path)
您都會聽到以前的音頻以及新的音頻。 即,上一個不會停止
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.