【发布时间】:2012-04-10 23:35:16
【问题描述】:
我正在编写一个使用服务来播放警报音的 Android 警报应用程序。目前,我可以播放音频,但它以可以通过调低设备音量来静音的形式播放。因此,我正在尝试添加对setAudioStreamType(AudioManager.STREAM_ALARM); 的调用以防止这种情况发生。
我的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 永远不会播放音频。如果我将该行注释掉,音频就会播放。
使用该行,我收到以下运行时错误:
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)
一些研究(我现在找不到链接)告诉我 setAudioStreamType() 不能在 prepare() 被调用后被调用,而 create() 隐式调用 prepare()。
无论如何,如果没有这样的错误,我应该如何setAudioStreamType()?
【问题讨论】:
标签: android android-mediaplayer