【Android】WebView内でカメラ起動させる正しい設定・コード例

Androidアプリ開発にて困った場面が。

  • アプリ内にWebViewを組み込んでいる
  • その中でカメラを起動させたい
  • なぜかカメラが起動してくれない...

パーミッション付与だけでは不十分でした。

いくつか注意点みたいなのがあるので、
Android+WebViewでカメラ起動させる方法をメモ

1.起動時にカメラのパーミッションを許可させる

まずは基本中の基本から

カメラのパーミッション(権限)の追加

このような手順で追加してみてください。

AndroidManifest.xmlにパーミッション追加

まずはカメラ権限を付与してあげます。

▼ AndroidManifest.xmlに次を追加

追加する場所はmanifest要素の直下とかでOKだと思います。ただしカメラ起動にはAndroidManifest.xmlへの権限追加だけでは不十分です。(カメラ起動などのプライベートな権限はアプリ起動時に許可が必要)

アプリ起動時にカメラ起動の許可を取る

AndroidManifest.xmlへの追加だけでは不十分

アプリ起動時に許可ダイアログ表示も必要です。

▼ Activity#onCreate に次コードを追加(kotlin)

実は APIレベル >= 23 以降はこのような許可ダイアログの表示が必須になりました。(昔はAndroidManifest.xmlに追加するだけのユルユル権限だった。。。)

より詳しくは次記事で解説してあります。

▼ Androidでパーミッション許可ダイアログの出し方

もし詳しい実装が知りたいなら参照してください。

2.WebViewでonPermissionRequestをオーバーライド

これは僕自身も盲点でした。

カメラ起動にはこの処理も必要です。

▼ WebChromeClient#onPermissionRequestをオーバーライド

カメラ起動にはパーミッション許可ダイアログを出すだけではなく、WebViewに対してWebChromeClient#onPermissionRequestのオーバーライドも必須みたいです。

これが分からなくて数時間うんうん悩んでました(-_-;)。もしカメラ起動したいなら、必ずWebViewに対してもカメラ起動を許可するようにしてください。(この表現で正しいのかな?)

3.WebView側で基本設定が抜けていないかもチェック

WebViewで基本設定を忘れてる場合もあります。

こういった設定も抜けてないか確認してください。

▼ WebViewSettingsの基本設定を設定

こういった基本設定も有効にしておくと無難。

僕の場合、上記設定でカメラ起動できました。

WebViewでカメラ起動しない時のチェックリスト

ということで箇条書きでまとめます。

この3点をとりあえず確認しておけばOKです。

以上、WebViewでカメラ起動しない時の対処でした。ではまた