前回の記事はこちらです。
ブログの読者からコメントをいただきました。ありがとうございます。コメントを引用させていただきますと、
uses-featureのandroid.hardware.camera2.fullって公式のリファレンスに見当たらないのですが、存在するのでしょうか?
もともと uses-featureの android.hardware.cameraは「背面カメラを使用する」という宣言であって、API verは関係ないような気がします。
これに関して再勉強しましたので、ここにメモしたいと思います。
そもそも uses-featureとはなんなのか
インストール先にこの機能が欲しいという宣言
まず uses-featureでandroid.hardware.cameraを制限した場合、これは以下を意味します。
背面カメラが無いAndroid機にはインストールしない。
私のアプリでは背面カメラが有効でないと動かないようなので、これはしょうがないものですね。実際にテストとして、前回の記事ではuses-featureを以下のようにしていました。
<uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.camera2.full" android:required="false"/> <uses-feature android:name="android.hardware.camera.autofocus"/>
これをこのように変更できました。
<uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera2.full" android:required="false"/> <uses-feature android:name="android.hardware.camera.autofocus"/>
android:required="false"を消しただけですね。当然カメラ機能を使うアプリなので、 android:required="false"は不要でしたね。ごめんなさい。
ではuses-feature android:name="android.hardware.camera2.full" とは?
android.hardware.camera2.full とは?
以下の記事を参考にしました。
stackoverflow.com
拙い私の意訳ではありますが、私はこう解釈しました。
camera2には制限版と完全版があって、もし完全版を利用したい場合は android.hardware.camera2.fullとしてね。
ということだそうです。ただ宣言しちゃうと対応機種が0台になっちゃうので、android:required="false"としました。
じゃぁ宣言する必要ある?
ごめんなさい。不明です。ただ、Camera2APIを使用する以上、宣言することが親切だと思います、というものです。もちろんベストプラクティスでは無いとは思いますが、とりあえずこのようにした方がよさそうです。
ひとまずの結論
こうして見ました
前述しましたが、以下のようにしました。
<uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera2.full" android:required="false"/> <uses-feature android:name="android.hardware.camera.autofocus"/>
これによる対応機種の変動は、
変更前
変更後
対応機種変動ありませんでした。
終わりに
自分の中で整理ができてなかったuses-featureについて少し整理ができました。これが誰かの役に立てばいいなと思います。
いやそれはおかしいという意見はどしどしいただけると嬉しいです。よろしくお願いします。