Androidプログラマへの道 〜 Moonlight 明日香 〜 - ハードウェアの搭載をチェックする
使いたいハードウェアまたはハードウェアに依存する機能を端末がサポートしているかを調べるには, PackageManagerクラスを使用する.

ハードウェアのチェック

  • HardwareCheck.java
    • PackageManager.FEATURE_XXXXで, チェックするハードウェアまたはハードウェアに依存する機能を選択する.
    • getPackageManagerメソッドで, PackageManagerのインスタンスを取得する.
    • PackageManager#hasSystemFeatureメソッドで, チャックする.
 PackageManager#hasSystemFeatureメソッド利用できる定数の一部を示す.
定数ハードウェア
FEATURE_BLUETOOTHBluetooth
FEATURE_CAMERAリアのカメラ
FEATURE_CAMERA_AUTOFOCUSオートフォーカス機能
FEATURE_CAMERA_FLASHカメラのフラッシュ
FEATURE_CAMERA_FRONTフロントのカメ
FEATURE_LIVE_WALLPAPERライブ壁紙
FEATURE_LOCATION位置情報取得機能
FEATURE_LOCATION_GPSGPS
FEATURE_LOCATION_NETWORKネットワーク位置情報取得
FEATURE_MICROPHONEマイク
FEATURE_NFCNFC
FEATURE_SENSOR_ACCELEROMETER加速度センサー
FEATURE_SENSOR_BAROMETER圧力センサー
FEATURE_SENSOR_COMPASSコンパス
FEATURE_SENSOR_GYROSCOPEジャイロスコープ
FEATURE_SENSOR_LIGHT照度センサー
FEATURE_SENSOR_PROXIMITY近接センサー
FEATURE_TELEPHONY移動体データ通信
FEATURE_TELEVISIONTV
FEATURE_TOUCHSCREENタッチスクリーン
FEATURE_TOUCHSCREEN_MULTITOUCHマルチタッチ
FEATURE_USB_ACCESSORYUSBアクセサリー
FEATURE_USB_HOSTUSBホスト
FEATURE_WIFIWiFi
FEATURE_WIFI_DIRECTWiFi Direct
   注) Android SDKのバージョンにより, サポートしている定数が異なる.
package com.moonlight_aska.android.hardwarecheck;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.widget.TextView;

public class HardwareCheck extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView text = (TextView)findViewById(R.id.text);
    // チェックするハードウェア
    String [] feature = {
      PackageManager.FEATURE_BLUETOOTH,
      PackageManager.FEATURE_CAMERA,
      PackageManager.FEATURE_CAMERA_AUTOFOCUS,
      PackageManager.FEATURE_CAMERA_FLASH,
      PackageManager.FEATURE_CAMERA_FRONT,
      PackageManager.FEATURE_LIVE_WALLPAPER,
      PackageManager.FEATURE_LOCATION,
      PackageManager.FEATURE_LOCATION_GPS,
      PackageManager.FEATURE_LOCATION_NETWORK,
      PackageManager.FEATURE_MICROPHONE,
      PackageManager.FEATURE_NFC,
      PackageManager.FEATURE_SENSOR_ACCELEROMETER,
      PackageManager.FEATURE_SENSOR_BAROMETER,
      PackageManager.FEATURE_SENSOR_COMPASS,
      PackageManager.FEATURE_SENSOR_GYROSCOPE,
      PackageManager.FEATURE_SENSOR_LIGHT,
      PackageManager.FEATURE_SENSOR_PROXIMITY,
      PackageManager.FEATURE_TELEPHONY,
      PackageManager.FEATURE_TELEVISION,
      PackageManager.FEATURE_TOUCHSCREEN,
      PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH,
      PackageManager.FEATURE_USB_ACCESSORY,
      PackageManager.FEATURE_USB_HOST,
      PackageManager.FEATURE_WIFI,
      PackageManager.FEATURE_WIFI_DIRECT,
      "" };
    String [] featureName = {
      "Bluetooth", "Camera", "Camera autofocus", "Camera flash",
      "Front camera", "Live wallpaper", "Location", "GPS",
      "Network location", "Microphone", "NFC", "Accelerometer sensor",
      "Barometer sensor", "Compass sensor", "Gyroscope sensor",
      "Light sensor", "Proximity sensor", "Telephony", "TV",
      "Touch screen", "Multi touch", "USB accessory", "USB host",
      "WiFi", "WiFi Direct", "" };

    PackageManager pm = getPackageManager();
    String results = "";
    for (int i=0; feature[i] != ""; i++) {
      // 順にハードウェアをチェック
      if (pm.hasSystemFeature(feature[i])) {
        results += featureName[i] + " supported.\n";
      }
      else {
        results += featureName[i] + " not supported.\n";
      }
    }
    text.setText(results);
  }
}
  • 動作例
    • 端末:SHARP SH-03C / Android 2.2

    • 端末:Google Nexus 7 / Android 4.1