簡體   English   中英

android從SD卡播放聲音

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM