androidstudio中的java调用mediarecorder程序崩溃

kxeu7u2r  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(440)

我试图创建一个类,设置和开始录音,但一旦我点击按钮的应用程序崩溃。我把问题隔离到了我为medirecorder设置参数的地方。

  1. private void startRec() throws IOException {
  2. if (mrecorder!=null)
  3. mrecorder.release();
  4. mrecorder= new MediaRecorder();
  5. -> mrecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  6. /*
  7. mrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  8. mrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  9. mrecorder.setOutputFile(MFILE);
  10. mrecorder.prepare();
  11. mrecorder.start();
  12. */
  13. }

当注解开头上方带有箭头的行被执行时,它会崩溃。我还向清单添加了以下权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.RECORD_AUDIO" />

非常感谢您的帮助。
更新的logcat
[05-12 00:39:13.299 30086:30158 d/]ro.exynos.dss已启用:0 05-12 00:39:13.309 30086-30158/record66.record6 d/mali_winsys:new_window_surface返回0x3000,[1440x2560]-format:1 05-12 00:39:13.319 30086-30086/record66.record6 w/displaylistcanvas:displaylistcanvas在未绑定的rendernode(没有mowningview)05-12 00:39:13.319 30086-30158/record66.record6 d/libglesv1:dts\u glapi:dts不允许用于包:record66.record6 05-12 00:39:13.359 30086-30086/record66.record6d/viewrootimpl:msg\u resized\u report:ci=rect(0,96-0,0)vi=rect(0,96-0,0)或=1 05-12 00:39:13.389 30086-30086/record66.record6 i/timeline:timeline:activity\u idle id:android.os。binderproxy@682466c time:234401322 05-12 00:39:15.749 30086-30086/record66.record6 d/viewrootimpl:viewpostimeinputstage进程指针0 05-12 00:39:15.879 30086-30086/record66.record6 d/viewrootimpl:viewpostimeinputstage进程指针105-12 00:39:15.929 30086-30086/record66.record6 d/androidruntime:关闭vm 05-12 00:39:15.939 30086-30086/record66.record6 e/androidruntime:致命异常:主进程:record66.record6,pid:30086 java.lang.runtimeexception:setaudiosource失败。位于android.media.mediarecorder.\u setaudiosource(本机方法)位于android.media.mediarecorder.setaudiosource(mediarecorder)。java:488)在record66.record6.mainactivity.startrec(mainactivity。java:58)在record66.record6.mainactivity.onclick(mainactivity。java:94)在android.view.view.performclick(view。java:5697)在android.widget.textview.performclick(textview。java:10815)在android.view.view$performclick.run(view。java:22526)在android.os.handler.handlecallback(handler。java:739)在android.os.handler.dispatchmessage(handler。java:95)在android.os.looper.loop(looper。java:158)在android.app.activitythread.main(activitythread。java:7229)在java.lang.reflect.method.invoke(本机方法)位于com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit)。java:1230)在com.android.internal.os.zygoteinit.main(zygoteinit。java:1120)05-12 00:39:17.909 30086-30086/record66.record6 i/进程:发送信号。pid:30086信号:9

gopyfrb3

gopyfrb31#

请看看logcat是什么。
告诉我们你犯了什么错误。所以我可以帮忙。

  1. package com.example.dhrupalpatel.test;
  2. import android.app.Activity;
  3. import android.media.MediaRecorder;
  4. import android.os.Bundle;
  5. import android.os.Environment;
  6. import java.io.File;
  7. import java.io.IOException;
  8. public class MainActivity extends Activity implements View.OnClickListener{
  9. MediaRecorder mrecorder;
  10. boolean mStartRecording=false;
  11. Button start, stop;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. start =(Button)findViewById(R.id.start);
  17. stop =(Button)findViewById(R.id.stop);
  18. start.setOnClickListener(this);
  19. stop.setOnClickListener(this);
  20. }
  21. private void startRec() throws IOException {
  22. boolean mExternalStorageAvailable = false;
  23. boolean mExternalStorageWriteable = false;
  24. String state = Environment.getExternalStorageState();
  25. if (Environment.MEDIA_MOUNTED.equals(state)) {
  26. // We can read and write the media
  27. mExternalStorageAvailable = mExternalStorageWriteable = true;
  28. } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
  29. // We can only read the media
  30. mExternalStorageAvailable = true;
  31. mExternalStorageWriteable = false;
  32. } else {
  33. // Something else is wrong. It may be one of many other states, but all we need
  34. // to know is we can neither read nor write
  35. mExternalStorageAvailable = mExternalStorageWriteable = false;
  36. }
  37. File sdCardDirectory= Environment
  38. .getExternalStorageDirectory();
  39. if(mExternalStorageAvailable && !sdCardDirectory.exists())
  40. {
  41. sdCardDirectory.mkdir();
  42. }
  43. File f= new File(sdCardDirectory.getPath()+"/"+System.currentTimeMillis()+".mp3");
  44. if( mrecorder == null ) {
  45. mrecorder = new MediaRecorder();
  46. mrecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  47. mrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  48. mrecorder.setOutputFile(f.getPath());
  49. mrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  50. }
  51. if(!mStartRecording) {
  52. try {
  53. mrecorder.prepare();
  54. mrecorder.start();
  55. mStartRecording = true;
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
  61. private void stopRec() throws IOException {
  62. if(mStartRecording) {
  63. mStartRecording = false;
  64. mrecorder.stop();
  65. mrecorder.reset();
  66. mrecorder.release();
  67. mrecorder = null;
  68. }
  69. }
  70. @Override
  71. public void onClick(View v) {
  72. switch (v.getId())
  73. {
  74. case R.id.start:
  75. try {
  76. startRec();
  77. } catch (IOException e) {
  78. e.printStackTrace();
  79. }
  80. break;
  81. case R.id.stop:
  82. try {
  83. stopRec();
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. break;
  88. }
  89. }
  90. }
展开查看全部

相关问题