デバイスのデフォルトのカメラ アプリケーションで写真や動画の撮影などの基本的なカメラ操作を行う場合は、カメラ ライブラリと統合する必要はありません。代わりに、Intent を使用します。
カメラアプリで写真を撮影する
Android は、Intent を呼び出してアクションを他のアプリに委任します。このプロセスは、Intent 自体、外部の Activity を開始するための呼び出し、フォーカスがアクティビティに戻ったときに画像データを処理するためのコード、という 3 つの部分で構成されます。
以下に、Intent を呼び出して写真を撮影する関数を示します。
Kotlin
val REQUEST_IMAGE_CAPTURE = 1
private fun dispatchTakePictureIntent() {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
try {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
} catch (e: ActivityNotFoundException) {
// display error state to the user
}
}
Java
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
} catch (ActivityNotFoundException e) {
// display error state to the user
}
}
カメラアプリで動画を撮影する
Intent を呼び出して動画をキャプチャすることもできます。
Kotlin
val REQUEST_VIDEO_CAPTURE = 1
private fun dispatchTakeVideoIntent() {
Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
takeVideoIntent.resolveActivity(packageManager)?.also {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
} ?: run {
//display error state to the user
}
}
}
Java
static final int REQUEST_VIDEO_CAPTURE = 1;
private void dispatchTakeVideoIntent() {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
else {
//display error state to the user
}
}
startActivityForResult() メソッドは、resolveActivity() を呼び出す条件によって保護されます。この条件は、Intent を処理可能な最初のアクティビティ コンポーネントを返します。このチェックを実行して、アプリがクラッシュしない Intent を呼び出していることを確認します。
参考情報
基本的なカメラ操作には、Intent を使用します。それ以外の、基本的な画像や動画のキャプチャよりも複雑なものには、Camera2 および CameraX ライブラリの使用をおすすめします。