2017-02-13 3 views
1

私は、フロントとバックカメラの両方を使用してプログラム的に画像をキャプチャし、内部メモリのフォルダに保存するAndroidアプリケーションに取り組んでいます。 イメージが保存されると、アプリケーションはフォルダの内容を電子メールで送信します。イメージが完全にキャプチャされるまでアプリケーションを待つ方法、それ以外の場合は空白の電子メールが送信されますか?カメラがアンドロイドで画像をキャプチャするまで待つ方法は?

class MainActivity{ 
//other codes 
public void buttonClick(View v) { 

    CameraService.startCamera(0, true); 
    sendEmail(); 
} 

    public void sendEmail() 
    { 
    //get contents from the folder and send the contents using java mail api 
    } 
} 

これは、フロントカメラとバックカメラの両方を使用して画像をキャプチャするクラスです。

class CamearService 
{ 
    public static void startCamera(int cameraID,final boolean isFirstTime) { 
    mCamera = Camera.open(cameraID); 
    try { 
     mCamera.setPreviewTexture(new SurfaceTexture(10)); 
    } catch (IOException e1) { 
    } 

    Parameters params = mCamera.getParameters(); 
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
    params.setPictureFormat(ImageFormat.JPEG); 
    params.setJpegQuality(100); 
    mCamera.setParameters(params); 
    mCamera.startPreview(); 

    mCamera.takePicture(null, null, null, new PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.i("hello", "picture-taken"); 
      if (data != null) { 

       mCamera.stopPreview(); 
       mCamera.release(); 

       try { 

        BitmapFactory.Options opts = new BitmapFactory.Options(); 
        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, 
          data.length, opts); 

        storeImage(bitmap); //function to store image to local folder 
        if(isFirstTime) 
        { 
         //Capture using front camera 
         CameraService.startCamera(1, false); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     } 
    }); 

} 
} 

iはボタンstartCameraをクリック

()関数が実行され、第2の画像をキャプチャする前のsendEmail()関数が実行されます。その結果、1つの画像しか電子メールで送信されません。

+0

はどのように正確に画像を撮影していますか? – yosriz

+1

'画像が保存されると、アプリケーションはフォルダの内容を電子メールで送信します。 '。まあまあだ!それは間違って行くことはできません。 – greenapps

+0

コードを記入してください。 –

答えて

1

あなたが探しているのは、Callbacks(Camera.takePicture()メソッド呼び出しで使用している)という基本的なプログラミングの概念です。

それはあなたのケースにも同様に適用されているとして、ここで私の答えをお読みください: Handle data returned by an Async task (Firebase)

関連する問題