我正在編寫一個Android報警應用程序,使用服務來播放鬧鐘鈴聲。目前,我可以播放音頻,但播放的格式可以通過關閉設備的音量來消除。因此,我正在嘗試添加一個致電setAudioStreamType(AudioManager.STREAM_ALARM);
以防止發生此情況。(Android MediaPlayer)如果MediaPlayer.create()隱式調用prepare(),我該如何調用setAudioStreamType()?
我有我的onStartCommand()
功能的服務如下:
MediaPlayer mMP;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
try
{
mMP = MediaPlayer.create(this, R.raw.alarm);
mMP.setAudioStreamType(AudioManager.STREAM_ALARM);
mMP.setLooping(true);
//mMP.prepare(); commented out since prepare() is called in create
}
catch (Exception e)
{
e.printStackTrace();
}
if (mMP != null) mMP.start();
return START_STICKY;
}
我的問題是與調用setAudioStreamType(),在MediaPlayer從未播放音頻。如果我評論這條線,音頻播放。
隨着時,得到下面的運行時錯誤(S)的行:
04-10 19:32:03.115:E/MediaPlayer的(3411):setAudioStream稱爲在狀態8
04-10 19:32:03.115:E/MediaPlayer的(3411):錯誤(-38,0)
04-10 19:32:03.115:E/MediaPlayer的(3411):開始稱爲狀態0
04-10 19:32:03.115:E/MediaPlayer(3411):錯誤(-38,0)
04-10 19:32:03.115:E/MediaPlayer的(3411):錯誤(-38,0)
04-10 19:32:03.115:E/MediaPlayer的(3411):錯誤( - 38,0)
一些研究(我找不到現在的鏈接)告訴我,prepare()
被稱爲後setAudioStreamType()
不能叫,那create()
隱式調用prepare()
。
在任何方面,我怎麼會setAudioStreamType()
沒有這樣的錯誤?
這聽起來像你的建議沿着這些線路的東西(在調用'創建()'後開始):;''setAudioStreamType();''setLooping();'復位()' 'prepare();' 我是否正確?如果是這樣,我在準備的電話上出現以下錯誤:'04-10 20:06:25.515:E/MediaPlayer(845):在狀態1開始呼叫' '04-10 20:06:25.515:E/MediaPlayer(845):error(-38,0) ' – finiteloop 2012-04-11 00:07:25
好像你在調用'start()'實際上,而不是'prepare()'時會出錯。你可以添加你的更新代碼的問題? – kcoppock 2012-04-11 00:40:22
你是對的,那個特殊的錯誤出現在電話開始後,還有一個錯誤的電話來準備我在發佈我的評論時錯過了日誌。 '04-10 21:42:11.896:E/MediaPlayer(593):在狀態1'中調用prepareAsync。 – finiteloop 2012-04-11 01:43:34