fin*_*oop 12 android android-mediaplayer
我正在编写一个使用服务的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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,通过调用setAudioStreamType(),MediaPlayer从不播放音频.如果我评论该行,音频播放.
使用该行,我得到以下运行时错误:
04-10 19:32:03.115:E/MediaPlayer(3411):在状态8中调用setAudioStream
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()没有这样的错误我该怎么办?
kco*_*ock 13
您可以调用mp.reset()然后设置流类型,数据源,然后进行准备.或者只使用默认构造函数并自己处理初始化.
编辑:
Resources res = getResources();
AssetFileDescriptor afd = res.openRawResourceFd(R.raw.alarm);
mp.reset();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11069 次 |
| 最近记录: |