반응형
android에서 camera.setParameters 실패
내 응용 프로그램에 카메라 기능을 포함했습니다. 시장에서도 앱을 출시했습니다. 한 사용자로부터 카메라를 여는 동안 오류가 발생한다는 오류 메시지를 받았습니다.
2.1에서 장치에서 앱을 테스트했습니다. 사용자로부터받은 오류는 주로 2.2를 실행하는 nexus 하나를 사용하는 것입니다 ... 여기 내가받은 logcat 오류가 있습니다.
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:647)
at com.CameraApp.Preview.surfaceChanged(Preview.java:67)
at android.view.SurfaceView.updateWindow(SurfaceView.java:538)
at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339)
at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.View.draw(View.java:6743)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
at android.view.View.draw(View.java:6743)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
at android.view.ViewRoot.draw(ViewRoot.java:1407)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
2.2 에뮬레이터에서 앱을 실행하여 확인했습니다. 그러나 그것은 잘 작동했습니다. 누구든지 오류가 발생하는 이유를 알려주시겠습니까?
댓글에서 언급 한 클래스는 다음과 같습니다.
class Preview extends SurfaceView implements SurfaceHolder.Callback
{
private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
Preview(Context context)
{
super(context);
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where
// to draw.
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
} catch (IOException exception) {
camera.release();
camera = null;
// TODO: add more exception handling logic here
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
camera.stopPreview();
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void draw(Canvas canvas)
{
super.draw(canvas);
Paint p= new Paint(Color.RED);
Log.d(TAG,"draw");
canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
모든 장치가 임의의 미리보기 크기를 지원하는 것은 아니기 때문에 실패합니다. 분명히 일부는 있지만 신뢰할 수 없습니다. surfaceChanged 메서드에서 다음과 같은 작업을 수행해야합니다.
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
// You need to choose the most appropriate previewSize for your app
Camera.Size previewSize = // .... select one of previewSizes here
parameters.setPreviewSize(previewSize.width, previewSize.height);
camera.setParameters(parameters);
camera.startPreview();
}
You'll have to figure out a way to scale this so that you don't lose the aspect ratio etc.
For reference here is the Android SDK doc.
ReferenceURL : https://stackoverflow.com/questions/3890381/camera-setparameters-failed-in-android
반응형
'Program Club' 카테고리의 다른 글
| bower를 최신 버전으로 업데이트하는 데 문제가 있습니다. (0) | 2020.12.25 |
|---|---|
| Laravel 5 : PHPUnit 및 사용 가능한 코드 커버리지 드라이버 없음 (0) | 2020.12.25 |
| Javascript | jQuery로 특정 인라인 스타일 제거 (0) | 2020.12.15 |
| 루비 날짜를 정수로 변환 (0) | 2020.12.15 |
| 잘못된 순방향 참조 및 열거 형 (0) | 2020.12.15 |