Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android MediaRecorder崩溃_Java_Android_Camera_Mediarecorder - Fatal编程技术网

Java Android MediaRecorder崩溃

Java Android MediaRecorder崩溃,java,android,camera,mediarecorder,Java,Android,Camera,Mediarecorder,更新: 好的,经过几天的测试和调试。。。我让它工作,但不是我想要的方式 它之前崩溃的原因是因为锁屏期间相机的“重新定向”,显然,这经常崩溃 一旦我强迫它使用横向模式,它就工作了。但是,我不希望它使用横向模式;我想让它在肖像模式下工作 代码直接取自Android Studio的示例(Media->MediaRecorder)。这个示例的代码是在横向模式下工作的,我不知道如何让它使用纵向模式,从而避免重新定向,从而避免崩溃 onPause、onResume代码和stacktrace中没有指向调用此方

更新:

好的,经过几天的测试和调试。。。我让它工作,但不是我想要的方式

它之前崩溃的原因是因为锁屏期间相机的“重新定向”,显然,这经常崩溃

一旦我强迫它使用横向模式,它就工作了。但是,我不希望它使用横向模式;我想让它在肖像模式下工作

代码直接取自Android Studio的示例(Media->MediaRecorder)。这个示例的代码是在横向模式下工作的,我不知道如何让它使用纵向模式,从而避免重新定向,从而避免崩溃

onPause、onResume代码和stacktrace中没有指向调用此方法的内容

易于复制:

1) 使用Android Studio获取MediaRecord示例应用程序 2) 在清单中,将android:screenOrientation=“横向”>更改为纵向。 3) 应用程序现在无法启动

我添加了mCamera.setDisplayOrientation(90),同一版本

代码:
无论何时从最近的任务列表中删除应用程序,进程都不会被完全清理,只是UI会被清理。因此,应用程序有责任清理您的活动或应用程序所拥有的资源。因此,您需要覆盖服务(Android服务)组件中的onTaskRemoved()方法,并执行清理(释放mediaplayer实例等)。

尝试以下方法:

 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoFrameRate(24);
    mMediaRecorder.setVideoSize(720,480);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mPreview.setRotation(90);
代替mMediaRecorder.setProfile(profile);
希望它能起作用

我应该在暂停或停止时释放摄像头和mediaRecorder吗?这是正确的问题吗?我可能没有正确地识别它,嘿,亲爱的,我在Android Studio中执行此演示时没有收到任何错误。步骤是什么,或者什么时候出现错误?如果你想解决它,请回答。你想做什么?你想让你的应用程序在后台运行吗?你应该将你的onPause和onResume代码发布到他实际上并没有在服务中运行它。我同意,现在我建议他使用一项服务,如果用户最近刷过应用程序,我建议他执行清理。这是一项活动,而不是一项服务。。。我检查了我的清理,它工作正常,因为我断开了锁屏,以不同的方式滥用我的应用程序启动,并以不同的方式关闭它。。。从未崩溃过。它只是不能从startActivity(intent)通过lockscreen接收器上的屏幕启动。我的onPause和onResume代码为空。我隔离了这个问题,是锁屏期间屏幕重新定向导致应用程序崩溃。显然,这是无法修复的,但我可以通过匹配手机的默认方向使应用程序不重新定向。这并不理想,所以我想知道如何阻止活动重新定向(我的默认设置是纵向,所以我需要应用程序接受纵向模式)
06-27 02:18:08.244  25734-25752/com.watchdawg.watchdawg E/MediaRecorder﹕ start failed: -22
06-27 02:18:08.253  25734-25752/com.watchdawg.watchdawg E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.watchdawg.watchdawg, PID: 25734
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at com.watchdawg.watchdawg.RecordActivity$MediaPrepareTask.doInBackground(RecordActivity.java:276)
at com.watchdawg.watchdawg.RecordActivity$MediaPrepareTask.doInBackground(RecordActivity.java:267)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoFrameRate(24);
    mMediaRecorder.setVideoSize(720,480);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mPreview.setRotation(90);