项目场景:

SurfaceView: Exception configuring surface
java.lang.RuntimeException: setParameters failed

问题描述:

在跑一个启用相机的程序时出现以下报错与bug

SurfaceView: Exception configuring surface
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:2262)
at com.wxdld.camear.CameraPreview.updateCameraParameters(CameraPreview.java:207)
at com.wxdld.camear.CameraPreview.surfaceCreated(CameraPreview.java:102)
at android.view.SurfaceView.updateSurface(SurfaceView.java:675)
at android.view.SurfaceView 2. o n P r e D r a w ( S u r f a c e V i e w . j a v a : 143 ) a t a n d r o i d . v i e w . V i e w T r e e O b s e r v e r . d i s p a t c h O n P r e D r a w ( V i e w T r e e O b s e r v e r . j a v a : 977 ) a t a n d r o i d . v i e w . V i e w R o o t I m p l . p e r f o r m T r a v e r s a l s ( V i e w R o o t I m p l . j a v a : 2522 ) a t a n d r o i d . v i e w . V i e w R o o t I m p l . d o T r a v e r s a l ( V i e w R o o t I m p l . j a v a : 1505 ) a t a n d r o i d . v i e w . V i e w R o o t I m p l 2.onPreDraw(SurfaceView.java:143) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:977) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2522) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1505) at android.view.ViewRootImpl 2.onPreDraw(SurfaceView.java:143)atandroid.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:977)atandroid.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2522)atandroid.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1505)atandroid.view.ViewRootImplTraversalRunnable.run(ViewRootImpl.java:7354)
at android.view.Choreographer C a l l b a c k R e c o r d . r u n ( C h o r e o g r a p h e r . j a v a : 1092 ) a t a n d r o i d . v i e w . C h o r e o g r a p h e r . d o C a l l b a c k s ( C h o r e o g r a p h e r . j a v a : 888 ) a t a n d r o i d . v i e w . C h o r e o g r a p h e r . d o F r a m e ( C h o r e o g r a p h e r . j a v a : 819 ) a t a n d r o i d . v i e w . C h o r e o g r a p h e r CallbackRecord.run(Choreographer.java:1092) at android.view.Choreographer.doCallbacks(Choreographer.java:888) at android.view.Choreographer.doFrame(Choreographer.java:819) at android.view.Choreographer CallbackRecord.run(Choreographer.java:1092)atandroid.view.Choreographer.doCallbacks(Choreographer.java:888)atandroid.view.Choreographer.doFrame(Choreographer.java:819)atandroid.view.ChoreographerFrameDisplayEventReceiver.run(Choreographer.java:1078)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

查看此博文得以解决https://blog.csdn.net/qq_42618969/article/details/97922810


但之前利用Debug,发现下面两项debug数据都正常,为啥不能正常进入相机预览程序呢

		//手机支持预览图片尺寸集合
		 List<Camera.Size>pictureList = parameters.getSupportedPictureSizes();
		//手机支持的预览尺寸集合
            List<Camera.Size>previewList = parameters.getSupportedPreviewSizes();

以下参数均正确I/System.out: width:------------------------1920, height :-------------1080
I/System.out: width:------------------------1920, height :-------------1080

//设置为当前手机的最大尺寸
 parameters.setPictureSize(pictureList.get(2).width,pictureList.get(2).height);
//设置为当前使用手机的最大尺寸
 parameters.setPreviewSize(previewList.get(2).width,pictureList.get(2).height);
 

原因分析:

可能是以下屏幕预览数据设置失败,原因未知,可能是由于特定设备不兼容

//设置为当前手机的最大尺寸
 parameters.setPictureSize(pictureList.get(2).width,pictureList.get(2).height);
//设置为当前使用手机的最大尺寸
 parameters.setPreviewSize(previewList.get(2).width,pictureList.get(2).height);

解决方案:

移除上述设置代码,启用系统自定义尺寸;或者设置设备支持的预览尺寸,相机程序就出来了

Logo

鸿蒙生态一站式服务平台。

更多推荐