카메라 API를 사용하여 앱을 작성하고 미리보기를 표시하고 사진을 찍습니다. 첫 번째 버전이 잘 작동합니다. I도 설정 부재onResume에서 Android 카메라 API 앱이 다운 됨
public class CameraDemo extends Activity
: 클래스는 미리보기 서피스 뷰 SurfaceView 메인 액티비티의 SurfaceHolder.Callback
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);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
hasSurface = true;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// It will be called immediately after surfaceCreated
// I move it to Resume.
setCameraPreviewParameters();
camera.startPreview();
}
구현 연장 CameraUnit UI를; 때문이다 :하지 OnCreate
public class CameraUnit extends LinearLayout
,
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ui = new CameraUnit(this);
setContentView((View) ui);
Log.d(TAG, "onCreate'd");
}
는 그것이 서피스 뷰 SurfaceView의 LinearLayout을 포함하는 객체 및 카메라 버튼을 만든다.
onResume은 다음과 같습니다
@Override
protected void onResume() {
super.onResume();
}
이 작동하지만, 나는 onResume은 비워 둘 수 없습니다한다고 생각합니다. 또한 surfaceCreated와 surfaceChanged가 비어있는 것을 볼 수 있습니다. famous Android app example OCRTest 그래서 surfaceCreated와 surfaceChanged의 명령을 onResume으로 옮기는 것이 더 효과적이며 실현 가능하다고 생각합니다.
나는 내 응용 프로그램의 첫 번째 버전에 대한 흐름 채팅이 있어야한다고 생각 : 주요 활동합니다 (있는 LinearLayout과 서피스 뷰 SurfaceView는, 카메라 버튼이 생성)에서 onCreate, surfaceCreated 및 surfaceChanged이 onResume,라고합니다.
그래서 단순히 surfaceCreated 및 surfaceChanged의 명령을 onResume으로 옮길 수 있습니다. 하지만 작동하지 않습니다! 표면이 null인지 확인하기 위해 Debug를 사용했습니다. 나는 surfaceCreatd가 호출되지 않았다고 생각합니다. 내 응용 프로그램은 주요 활동에서 SurfaceHolder.Callback을 구현하는 다른 OCRTest입니다. 나는 서피스 뷰 SurfaceView에서의 SurfaceHolder.Callback을 구현 :
class Preview extends SurfaceView implements SurfaceHolder.Callback
그래서 나는 onResume
내가 무작위로 마지막 세 개의 정수 인수를 설정
ui.preview.surfaceCreated(ui.preview.mHolder);
ui.preview.surfaceChanged(ui.preview.mHolder, 0, 800, 400);
에 두 줄을 추가합니다. 활동을 시작하면 Android 휴대 전화의 오류 창이 열립니다. 그것은 "원인 : java.lang.RuntimeException : 카메라 서비스에 연결하지 못했습니다"라고 말합니다. 그러나 그것을 고치는 방법 ???? 감사합니다.
오류는 다음과 같습니다 카메라가 다른 응용 프로그램에서 사용중인 경우
01-07 00:27:57.173: W/dalvikvm(11625): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
01-07 00:27:57.173: E/AndroidRuntime(11625): FATAL EXCEPTION: main
01-07 00:27:57.173: E/AndroidRuntime(11625): java.lang.RuntimeException: Unable to resume activity {com.example/com.example.CameraDemo}: java.lang.RuntimeException: Fail to connect to camera service
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2460)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2481)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1847)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.os.Handler.dispatchMessage(Handler.java:99)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.os.Looper.loop(Looper.java:150)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.main(ActivityThread.java:4263)
01-07 00:27:57.173: E/AndroidRuntime(11625): at java.lang.reflect.Method.invokeNative(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): at java.lang.reflect.Method.invoke(Method.java:507)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-07 00:27:57.173: E/AndroidRuntime(11625): at dalvik.system.NativeStart.main(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): Caused by: java.lang.RuntimeException: Fail to connect to camera service
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.native_setup(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.<init>(Camera.java:265)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.open(Camera.java:241)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.example.Preview.surfaceCreated(Preview.java:60)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.example.CameraDemo.onResume(CameraDemo.java:64)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1242)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.Activity.performResume(Activity.java:3904)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2450)
01-07 00:27:57.173: E/AndroidRuntime(11625): ... 12 more
01-07 00:27:59.455: I/Process(11625): Sending signal. PID: 11625 SIG: 9
내가 Acitivity의 onCreate, onResume 및 표면 만들기 등의 구현 시퀀스와 관련이있을 수 있음을 알았습니다. surfaceView 클래스가 SurfaceHolder.Callback을 구현하고 표면이 준비되어 있지 않아도 표면이 준비되지 않은 것처럼 보입니다. 활동의 onResume. 그럼 언제 우리가 준비 됐니? 액티비티가 SurfaceHolder.Callback을 구현하는 경우 고유 한 시퀀스는 무엇입니까? 도움!!!! – user1914692