カメラAPIを使用してアプリを作成しています。プレビューを表示して写真を撮ります。 最初のバージョンがうまく機能します。私はまた、メンバ設定AndroidのカメラAPIアプリがonResumeでクラッシュする
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
私はランダムに、最後の3つの整数引数を設定
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、surfaceの作成の実装シーケンスに関係しているかもしれないと感じます。それは、surfaceViewクラスがSurfaceHolder.Callbackを実装していると思われます。アクティビティのonResumeのそれではいつ準備ができていますか?アクティビティがSurfaceHolder.Callbackを実装している場合、固有のシーケンスは何ですか?助けて!!!! – user1914692