【Android】プリインストールのカメラ起動

【Android】プリインストールのカメラ起動

目次

はじめに
想定外の動き
ACTION_IMAGE_CAPTURE を使う
INTENT_ACTION_STILL_IMAGE_CAMERA を使う
比較結果

はじめに

Androidアプリを作成する中で、カメラ機能が必要になり、細かい制御を省くためにプリインストールのカメラアプリを代わりに使いたいと思ったことはないでしょうか。

「ACTION_IMAGE_CAPTURE」「INTENT_ACTION_STILL_IMAGE_CAMERA」 のIntentを使うことで
プリインストールのカメラを起動することは可能です。
ただ、想定しているような使い方はできないかもしれません。
実装したものの、起動するカメラアプリが想像と違っており、想定する機能が実装できない問題が発生しかねないので
起動の仕方によりどのような違いがあるか、を比較していきます。

想定外の動き

「想定しているような使い方はできないかもしれない」と書きましたが、
実際に思うようにいかなかった内容は下記のとおりです。

【想像する動き】
・ホーム画面から起動するカメラアプリがそのまま使える
・撮影した写真が結果として受け取れる

【実際の動き】
・カメラアプリ内の機能が全然ない
・連続撮影できない
・撮影後に確認(OK、キャンセル)が入る
・カメラアプリそのまま起動はできたけど結果を受け取れない

このような画面が起動してほしいのですが
以降では実装方法による起動画面の違いを記載していきます。

ACTION_IMAGE_CAPTURE を使う

細かい実装方法や権限周りは省きますが、
「MediaStore.ACTION_IMAGE_CAPTURE」のIntentを使います。

コード

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri)
captureLauncher.launch(intent)

起動画面

通常のカメラアプリと機能が異なります。
画像のサイズやその他いろいろな機能が省かれています。
撮影した画像は、
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri)
で指定したuriに保存されるため、移動したりDBに保存したり、撮影画像を扱うことができます。

また、撮影後このように保存するか、キャンセルするかの確認が入ります。
※端末によっては確認されずにそのまま保存するものもあります

その他、1枚撮影するとカメラアプリは終了します。
返却されるresultCodeには
写真を撮影した場合は「RESULT_OK」、
撮影せずにカメラアプリを終了した場合、確認画面でキャンセルした場合は「RESULT_CANCELED」が返ります。

INTENT_ACTION_STILL_IMAGE_CAMERA を使う

「MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA」のIntentを使って
カメラを起動してみます。

コード

val intent = Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA)
captureLauncher.launch(intent)

起動画面

通常のカメラアプリが静止画モードで起動します。
通常通りすべての機能が使えます。
撮影した画像の保存先を指定することはできません。

また、撮影しても結果は返却されず、
カメラアプリを終了した際にのみ「RESULT_CANCELED」が返却されます。

比較結果

「ACTION_IMAGE_CAPTURE」と「INTENT_ACTION_STILL_IMAGE_CAMERA」の違いをまとめてみました。
そもそも用途や目的が違うものかもしれませんが、
プリインストールのカメラアプリを使う前に、何が出来て何が出来ないか、を確認するための参考にできればと思います。

ACTION_IMAGE_CAPTUREINTENT_ACTION_STILL_IMAGE_CAMERA
起動アプリ・ 通常のカメラアプリとは異なる画面が起動・通常のカメラアプリが起動
機能・フラッシュ
・撮影
・インカメラ/アウトカメラ切り替え
・フォーカス位置設定
・拡大縮小
・キャンセル(端末によってはボタンがない)
・カメラアプリに準拠
挙動・撮影後確認画面が表示される(端末によっては表示されない)
・撮影後(確認画面でOK後)カメラアプリが閉じる
・カメラアプリに準拠
撮影枚数・1枚のみ・連続撮影可(カメラアプリに準拠)
保存先・事前に指定可・指定不可(カメラアプリに準拠)
写真サイズ、解像度指定不可
・保存先を指定した場合は端末の最大値?
・保存先を指定しない場合はサムネイル程度のサイズ
・指定可(カメラアプリに準拠)
返却値:写真・保存先を指定した場合は返却値なし
・保存先を指定しない場合はサムネイルを返却
・返却しない
返却値:OK・撮影した場合・返却しない
返却値:キャンセル・戻るボタン
・確認画面でキャンセル
・カメラアプリ終了
・カメラアプリ終了