0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Permission Implies Unsupported Chrome OS Hardware] CAMERAのuses-permissionを足したら自動的にuses-featureが追加されてlintエラーになった

Last updated at Posted at 2025-09-04

<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を上書きするため、明示的に定義を追加します。

AndroidManifest.xml
    <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 は背面カメラのみが対象なので注意)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?