2013-04-12 1 views
5

私は、Androidカメラにアクセスし、フレーム(画像)を取得し、処理してからプロセスを再起動するアプリケーションを作成しようとしています。setOneShotPreviewCallbackが私のメソッドを呼び戻さない

camera.setOneShotPreviewCallback(...)を呼び出してコールバックで受信したデータを処理し、setOneShotPreviewCallbackを再度呼び出してフレームを取得します。

問題は、私はsetOneShotPreviewCallbackをメインアクティビティのonResume()機能に入れてプロセスを開始できないということです。もし私がそうするなら、私のコールバックは決して呼び出されません。アプリケーションが起動すると、コールバックが呼び出されることはありません

public void onResume() { 
    super.onResume(); 
    camera = getCameraInstance(); 

    cameraPreviewSurface = new CameraPreview(this, camera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.removeAllViews(); 
    preview.addView(cameraPreviewSurface); 
    camera.setOneShotPreviewCallback(cameraPreviewCallback); 

    Button button = (Button) findViewById(R.id.button_capture); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      camera.setOneShotPreviewCallback(cameraPreviewCallback); 
     } 
    }); 
} 

、しかし、すぐにボタンが押されたように、私は、コールバックを得る:

は、次のテストコードを参照してください。

私はCameraPreviewクラスの中でcamera.startPreview();の後にsetOneShotPreviewCallbackを使用しようとしましたが、それでも私のメソッドは呼び出されませんでした。

答えて

4

問題が見つかりました。何らかの理由で、プレビューサーフェイスが初期化された後にコールバックを設定する必要があります。

私の場合、私はカスタムSurfaceViewを使っていたので、私はsurfaceCreatedsurfaceChangedの両方の関数でコールバックを適用しなければなりませんでした。

camera.setPreviewDisplay(surfaceHolder); 
camera.startPreview(); 
camera.setOneShotPreviewCallback(cameraPreviewCallback); 
関連する問題