
我正在学习如何使用http://developer.android.com/guide/topics/media/audio-capture.html#example录制音频
一切正常,但我想切换:
mfile@R_404_6889@ = Environment.getExternalStorageDirectory().getabsolutePath();mfile@R_404_6889@ += "/audiorecordtest.3gp";至
mfile@R_404_6889@ = getfilesDir().getabsolutePath();mfile@R_404_6889@ += "/audiorecordtest.3gp";但是我得到了这个错误
08-19 15:51:44.212: E/MediaPlayer(6654): error (1, -2147483648)08-19 15:51:44.212: E/AudioRecordTest(6654): prepare() Failed我试着记录我的新代码(以确保我使用的是有效路径).
注意:
这适用于我的三星galaxy,但不适用于我的Nexus One.我希望这适用于2.x,3.x和4.x.
更新:
我在startRecording()中添加了一个日志:
mRecorder.setoutputfile(mfile@R_404_6889@); Log.e("LOG", mfile@R_404_6889@);该日志的输出是:
08-22 12:28:40.112: E/LOG(9666): /data/data/com.example.testrecorder/files/audiorecordtest.3gp尝试记录异常:
private voID startPlaying() { mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(mfile@R_404_6889@); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() Failed", e); } }08-22 13:08:03.158: E/MediaPlayer(10093): error (1, -2147483648)08-22 13:08:03.168: E/AudioRecordTest(10093): prepare() Failed08-22 13:08:03.168: E/AudioRecordTest(10093): java.io.IOException: Prepare Failed.: status=0x108-22 13:08:03.168: E/AudioRecordTest(10093): at androID.media.MediaPlayer.prepare(Native Method)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.example.testrecorder.MainActivity.startPlaying(MainActivity.java:51)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.example.testrecorder.MainActivity.onPlay(MainActivity.java:41)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.example.testrecorder.MainActivity.access(MainActivity.java:39)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.example.testrecorder.MainActivity$Playbutton.onClick(MainActivity.java:113)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.vIEw.VIEw.performClick(VIEw.java:2532)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.vIEw.VIEw$PerformClick.run(VIEw.java:9308)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.os.Handler.handleCallback(Handler.java:587)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.os.Handler.dispatchMessage(Handler.java:92)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.os.Looper.loop(Looper.java:150)08-22 13:08:03.168: E/AudioRecordTest(10093): at androID.app.ActivityThread.main(ActivityThread.java:4333)08-22 13:08:03.168: E/AudioRecordTest(10093): at java.lang.reflect.Method.invokeNative(Native Method)08-22 13:08:03.168: E/AudioRecordTest(10093): at java.lang.reflect.Method.invoke(Method.java:507)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)08-22 13:08:03.168: E/AudioRecordTest(10093): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:597)08-22 13:08:03.168: E/AudioRecordTest(10093): at dalvik.system.NativeStart.main(Native Method)解决方法:
当您创建一个新的MediaPlayer对象时,它并不是您应用程序的一部分,它是系统的一部分.因为这是真的,它不能读取应用程序私有目录中的文件,除非它们是WORLD_READABLE.这就是为什么它适用于外部目录而不是内部目录.是的,这听起来很荒谬,我同意.
您应该能够通过创建fileDescriptor并以这种方式将其传递给MediaPlayer来解决这个问题:
fileinputStream fis = new fileinputStream(mfile@R_404_6889@);mPlayer.setDataSource(fis.getFD());注意:gtkandroID给出a more thorough explanation,这是我在bug tracker中找到的.如果这适合你,我建议你在另一个问题上提出他的回答.
总结以上是内存溢出为你收集整理的未解决:使用Google的示例进行Android音频录制全部内容,希望文章能够帮你解决未解决:使用Google的示例进行Android音频录制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)