java.lang.RuntimeException:Camera.setParameters

java.lang.RuntimeException:Camera.setParameters,java,android,camera,Java,Android,Camera,我知道以前有人问过这个问题,我也读过所有的解决方案,但我的情况有点奇怪,我一直在开发人员帐户上得到崩溃报告,如下所示: java.lang.RuntimeException:在 android.hardware.Camera.native_setParameters(本机方法:0)位于 android.hardware.Camera.setParameters(Camera.java:2080)位于 com.xxxxxxxxx.core.xxxxxxxxx.xxxxxxx.surfaceCrea

我知道以前有人问过这个问题,我也读过所有的解决方案,但我的情况有点奇怪,我一直在开发人员帐户上得到崩溃报告,如下所示:

java.lang.RuntimeException:在 android.hardware.Camera.native_setParameters(本机方法:0)位于 android.hardware.Camera.setParameters(Camera.java:2080)位于 com.xxxxxxxxx.core.xxxxxxxxx.xxxxxxx.surfaceCreated(BackgroundVideoRecorder.java:119) 在android.view.SurfaceView.updateWindow(SurfaceView.java:675)上 android.view.SurfaceView$3.onPreDraw(SurfaceView.java:185)位于 android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) 在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:2050) 位于 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6175) 在 Choreographer$CallbackRecord.run(Choreographer.java:773) 位于android.view.Choreographer.doCallbacks(Choreographer.java:586) doFrame(Choreographer.java:556)位于 Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:759) 位于android.os.Handler.handleCallback(Handler.java:739) dispatchMessage(Handler.java:95)位于 Looper.loop(Looper.java:135)位于 main(ActivityThread.java:5421)位于 java.lang.reflect.Method.invoke(本机方法:0)位于 java.lang.reflect.Method.invoke(Method.java:372)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

为了广告,我删除了应用程序名称,在多台设备上尝试了该应用程序,但我无法再现错误,即使我尝试的设备在崩溃报告中可用,在参数生成过程中,我确保检查是否支持每个参数,通过检查此处的摄像头参数,代码如下:

   if (front) {
            params = camera.getParameters();
            params.setRotation(90);
            List<String> focusModes = params.getSupportedFocusModes();
            if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
                Log.w("VideoTakerFront","Continuous Video Supported");
            }
        } else {
            params = camera.getParameters();
            params.setRotation(270);
            List<String> focusModes = params.getSupportedFocusModes();
            if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
                Log.w("VideoTakerBack","Continuous Video Supported");
            }
        }
        camera.setParameters(params);
                if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1){
                    camera.enableShutterSound(false);
                }
                else{
                    AudioManager audio= (AudioManager)this.getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
                    audio.setStreamVolume(AudioManager.STREAM_SYSTEM, 0,   AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
                }
        Log.w("VideoTaker", "Open Camera");
if(前){
params=camera.getParameters();
参数设置旋转(90);
List focusModes=params.getSupportedFocusModes();
if(focusModes.contains(Camera.Parameters.FOCUS\u MODE\u CONTINUOUS\u VIDEO)){
参数设置聚焦模式(摄像机参数聚焦模式连续视频);
Log.w(“VideoTakerFront”,“支持连续视频”);
}
}否则{
params=camera.getParameters();
参数设置旋转(270);
List focusModes=params.getSupportedFocusModes();
if(focusModes.contains(Camera.Parameters.FOCUS\u MODE\u CONTINUOUS\u VIDEO)){
参数设置聚焦模式(摄像机参数聚焦模式连续视频);
Log.w(“VideoTakerBack”,“支持连续视频”);
}
}
摄像机。设置参数(参数);
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.JELLY\u BEAN\u MR1){
摄像头。启用快门声音(错误);
}
否则{
AudioManager音频=(AudioManager)this.getApplicationContext().getSystemService(Context.audio\u服务);
audio.setStreamVolume(AudioManager.STREAM\u系统,0,AudioManager.FLAG\u移除\u声音\u和\u振动);
}
Log.w(“摄像机”、“开放式摄像机”);

谢谢你的帮助

我发现了问题。。。报告此问题的用户使用的是较旧版本的应用程序,我没有注意该版本,此问题以前发生在较旧版本中,之前我没有使用获取支持的焦点模式并检查它是否可用,谢谢

您是否检查了这些设备正在运行的API,因为API 21及以上版本不推荐使用android.hardware.Camera,这可能导致crashso我需要对高于21的设备使用Camera API 2?但是我有一个7.0设备,我没有面临这个问题。我强烈建议您替换不推荐的代码。我找不到合适的教程来实现Camera Api2代码:/
setParameters()
是一个脆弱的函数。由于许多原因,它可能会因RuntimeException而失败,您的代码必须准备好接受这些原因。通常,如果参数本身是合法的,则重试将成功。