Androidプログラマへの道 〜 Moonlight 明日香 〜 - 利用可能なカメラの情報を取得する

android.hardware.camera2

端末で利用可能なカメラの情報を取得するには, カメラマネージャ(CameraManagerク)ラスを利用する.

カメラ情報の取得(API Level 21)

  • Camera2Info.java
    • Activity#getSystemServiceメソッドで, Context.CAMERA_SERVICEを指定してCameraManagerのインスタンスを取得する.
    • CameraManager#getCameraIdListメソッドで, 順にカメラIDを取得する.
    • CameraManager#getCameraCharacteristicsメソッドで, 指定したカメラIDのカメラ特長を取得する.
    • CameraCharacteristics#getメソッドで, 指定したKEYの情報を取得する.
   注) KEYについては, CameraCharacteristicsを参照
package com.moonlight_aska.android.camera2info;

import android.app.Activity;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.util.Log;

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

    // カメラマネージャのインスタンスを取得
    CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
    try {
      for (String cameraId : manager.getCameraIdList()} {
        // 指定したカメラの情報を取得
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
        if (characteristics.get(CameraCharacteristics.LENS_FACING)
          == CameraCharacteristics.LENS_FACING_BACK) {
          Log.v("Camera2", "Facing : BACK");
        }
        else if (characteristics.get(CameraCharacteristics.LENS_FACING)
          == CameraCharacteristics.LENS_FACING_FRONT) {
          Log.v("Camera2", "Facing : FRONT");
        }
      }
    } catch (CameraAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

android.hardware.camera

端末で利用可能なカメラの情報を取得するには, カメラ(Camera)クラスを利用する.

カメラ情報の取得(API Level 9)

  • CameraInfo.java
    • Camera#getNumberOfCamerasメソッドで, 端末で利用可能なカメラの個数を取得する.
    • CameraInfoのインスタンスを生成する.
    • Camera#.getCameraInfoメソッドで, 指定したカメラの情報を取得する.
    • CameraInfo.facingはカメラ位置を, CameraInfo.orientationはカメラの縦/横向きを示す.
package com.moonlight_aska.android.camerainfo;

import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

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

    // 利用可能なカメラの個数を取得
    int numberOfCameras = Camera.getNumberOfCameras();
    CameraInfo cameraInfo = new CameraInfo();
    for (int i = 0; i < numberOfCameras; i++) {
      // 指定したカメラの情報を取得
      Camera.getCameraInfo(i, cameraInfo);
      if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
        Log.v("Camera", "Facing : BACK");
      }
      else if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
        Log.v("Camera", "Facing : FRONT");
      }
      Log.v("Camera", "Orientation : " + cameraInfo.orientation);
    }
  }
}
  • 動作例
端末:Nexus7 / Android 4.2.1