我为我的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 called in state 8
04-10 19:32:03.115: E/MediaPlayer(3411): error (-38,0)
04-10 19:32:03.115: E/MediaPlayer(3411): start called in state 0
04-10 19:32:03.115: E/MediaPlayer(3411): error (-38,0)
04-10 19:32:03.115: E/MediaPlayer(3411): Error (-38,0)
有些研究(现在我找不到链接)告诉我,在调用prepare()之后,setAudioStreamType()不能被调用,而create()隐含地调用prepare().
在任何方面,我应该如何设置AudioStreamType()没有这样的错误?
解决方法 您可以调用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();总结
以上是内存溢出为你收集整理的(Android MediaPlayer)如果MediaPlayer.create()隐式调用prepare(),我应该如何调用setAudioStreamType()?全部内容,希望文章能够帮你解决(Android MediaPlayer)如果MediaPlayer.create()隐式调用prepare(),我应该如何调用setAudioStreamType()?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)