项目场景:
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);
解决方案:
移除上述设置代码,启用系统自定义尺寸;或者设置设备支持的预览尺寸,相机程序就出来了