こんにちはsekitakaです。
Androidでデバイスがどのハードウェア機能(uses-feature
)を持っているかをJavaのコードで確認する方法を紹介します。
調べるコード
このコードをAndroidアプリのActivity内の任意の場所に記述すれば調査することができます。
PackageManager pm = getPackageManager();
FeatureInfo[] featureInfos = pm.getSystemAvailableFeatures();
for(FeatureInfo featureInfo : featureInfos){
Log.d(TAG,"Available Feature: " + featureInfo.name);
}
今回はAndroid TVがandroid.hardware.screen.PORTRAIT
を持っているのか調べたかったのですが、結果は以下のようになりました。
android.hardware.screen.PORTRAIT
はありませんでした。TVは横置きの端末だからでしょうか。
Available Feature: android.software.leanback_only
Available Feature: android.hardware.usb.accessory
Available Feature: android.software.backup
Available Feature: android.hardware.ethernet
Available Feature: android.software.voice_recognizers
Available Feature: android.software.picture_in_picture
Available Feature: android.hardware.type.television
Available Feature: com.google.android.feature.GOOGLE_BUILD
Available Feature: android.hardware.audio.output
Available Feature: android.software.live_tv
Available Feature: android.software.leanback
Available Feature: com.google.android.tv.installed
Available Feature: android.hardware.screen.landscape
Available Feature: android.software.webview
Available Feature: android.hardware.location.network
Available Feature: com.google.android.feature.GOOGLE_EXPERIENCE
Available Feature: com.google.android.feature.EXCHANGE_6_2
Available Feature: android.hardware.location
Available Feature: null
経緯
今回あるアプリのバージョンアップをしようとapkをアップロードしたところ、「サポートされている端末」の数が少し減少しました。
Activityを縦画面固定で使用するためにandroid:screenOrientation="portrait"
を追加したために、AndroidManifest.xmlが<uses-feature android:name="android.hardware.screen.PORTRAIT" android:required="true"/>
と解釈されたのが原因でした。
そこで <uses-feature android:name="android.hardware.screen.PORTRAIT" android:required="false"/>
にしようと思いましたが、android.hardware.screen.PORTRAIT
を持たない端末で起動したらどうなるのか確認したくなりました。
端末とハードウェア機能の一覧があればよかったのですが、ぐぐっても見当たらなかったので、android.hardware.screen.PORTRAIT
を持たなそうなAndroid TVで動作確認しようと思いましたが、果たして本当にandroid.hardware.screen.PORTRAIT
を持っていないのか確認したくなり調査を行った次第です。
ちなみにアプリ自体はクラッシュすること無く、Android TV上でPORTRAITモードで開きました。顔を傾ければなんとか使えるということです。