Intent で画像をキャプチャしたい
インテント cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
しかし、問題は、このコードでカメラが開始され、ユーザーがカメラボタンをクリックして画像をキャプチャする必要があることですが、私が望むのは、カメラが開始され、ユーザーとのさらなる対話なしで写真を撮ることです
INTENT を使用してこれを行いたい
Intent で画像をキャプチャしたい
インテント cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
しかし、問題は、このコードでカメラが開始され、ユーザーがカメラボタンをクリックして画像をキャプチャする必要があることですが、私が望むのは、カメラが開始され、ユーザーとのさらなる対話なしで写真を撮ることです
INTENT を使用してこれを行いたい
それが私がやった方法です:CameraとSurfaceHolderのインスタンスを宣言します。
オブジェクトCallBackPictureを作成し、PictureTakenにメソッドを実装します(写真を撮りたいときに起動されるメソッド)
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//DO YOUR STUFF
}
};
// Open the instance of camera
mCamera = Camera.open();
try {
// Call the preview (not sure if it is working without this call
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(mCamera == null) Log.i(TAG, "mCamera is null");
// Will call the onPictureTaken implemented above
// Look at the documentation : public final void takePicture
mCamera.takePicture(null, null, mCall);
mCamera.stopPreview();
mCamera.release();
これを変更することで、やりたいことができるようになります。Manifest.XMLも変更することを忘れないでください。ただし、すでに変更していると思います。
編集:時々stoppreview()とrelease()に問題があります。だから、私がやったことは:
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
mCamera = Camera.open();
etc...
これはできません。次の 2 つのオプションしかありません。
Intent を介してカメラ アプリを呼び出す。次に、ユーザーは通常の方法でカメラ アプリを使用します。つまり、準備ができたらボタンを押します。
クラスを使用するCamera- これは、Intent を介してカメラ アプリを実行する場合と比較して、はるかに多くの作業です。しかし、それはあなたに完全なコントロールを与えます。
カメラ インテントを呼び出すと、基本的にカメラ アプリ (またはこのインテントに登録された他のアプリ) を「実行」するため、基本的に、その動作を制御することはできません。Camera API を使用できます...こちらをご覧ください