开发过程遇到:
AssetFileDescriptor afd = c.getAssets().openFd("ring.mp3"); mMediaPlayer.setDataSource(afd.getFileDescriptor());mMediaPlayer.setDataSource(c.getResources().openRawResourceFd(R.raw.ring).getFileDescriptor());以上是两种设置资源的方法。
mMediaPlayer.PRepare();mMediaPlayer.start();在测试demo 的Activity中执行,是没有问题的。但是在项目中发现,使用OPPO等设备时,当设备push到达后,使用handler处理时,报出这样的错误。
java.io.IOException: Prepare failed.: status=0x1 at android.media.MediaPlayer.prepare(Native Method)
于是乎,先仔细查看API。虽然没有直接得到答案,但是有提到prepare应该要在子线程中应用,修改成:
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } });mMediaPlayer.prepareAsync();结果还是不行!!!
不过没有抛出异常。
+++++++++++++++++++++++++分割+++++++++++++++++++++++++++++++++++++++++++++++++++++
再是乎,
mMediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } });心碎一地,Error,what=1;extra=-2*****,(很大一个数)最后尝试:
fis = new FileInputStream(file); mMediaPlayer.setDataSource(fis.getFD());该路径是SD卡上的一个路径。终于可以了听到声音了……=========================================================================================
项目上也使用上了,但是不知道问题出在哪里??
难道是自定义Handler的问题?
在demo中试了也Handler处理,是可以响铃的。
剑走偏锋:
试着在项目上的Handler中发出广播,在Receiver中调用响铃,居然,居然,成功了!!
表示不解!!!!大家有遇到的可以分享下。
新闻热点
疑难解答