<uses-permission android:name="android.permission.CAMERA" />
とカメラのパーミッションを追加したところ、以下のlintエラーが出るようになりました。
Permission Implies Unsupported Chrome OS Hardware: Permission exists without corresponding hardware `<uses-feature android:name="android.hardware.camera" required="false">` tag
何が起こっているのか
公式のドキュメントによると、CAMERA
のパーミッションを追加した場合、以下のuser-featureが暗黙的に追加されるようです
android.hardware.camera
android.hardware.camera.autofocus
何がまずいのか
カメラのパーミッションを足したときに自動でuser-featureが追加されるため、 カメラやオートフォーカスの無い端末がGooglePlayから除外されます。 スマホでカメラ無しの端末はほとんど無いかもしれませんが、Chromebook等ではあり得るかもしれません。
どうすべきなのか
カメラアプリなどの場合
カメラが動作しないことにはアプリとして成立し得ないので、できることはありません。
それ以外の場合
カメラが必要になった段階でその端末がカメラを搭載しているか確認し、カメラ無し端末ではエラー表示をする、などといった対処が考えられます。
実装例
まず、暗黙的に追加されるuses-featureを上書きするため、明示的に定義を追加します。
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
次に PackageManager
で端末がカメラを搭載しているか確認します。
だいたいこんな感じのコードになるんじゃないかと思います。
onPermissionRequest = {
val hasCamera = context.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)
if (!hasCamera) {
// 何かしらのエラー表示
return@onPermissionRequest
}
val hasCameraPermission = ... // ランタイムパーミッションの処理など
}
FEATURE_CAMERA_ANY
は user-feature における android.hardware.camera.any
に対応する定数で、前面カメラと背面カメラの両方を含んだ表現です。
(FEATURE_CAMERA
は背面カメラのみが対象なので注意)