[英]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.