C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

Android 2.3から複数のカメラがサポートされた.
フロントカメラやバックカメラを指定してカメラを起動するには, CameraInfoクラスを利用する.

カメラを指定して起動(API Level 9)

  • src/MainActivity.java
    • 利用可能なカメラの情報を取得する」を参照し, 各カメラの情報を取得する.
    • カメラ情報を参照して, フロント/リアのカメラIDを取得する.
    • Camera#openメソッドで, カメラIDを指定してデバイスをオープンする.
package com.moonlight_aska.android.camera02;

import java.io.IOException;

import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainActivity extends Activity implements SurfaceHolder.Callback {
  private Camera mCamera = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
    SurfaceHolder holder = preview.getHolder();
    holder.addCallback(this);
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    int frontCameraId = -1;
    int backCameraId = -1;
    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) {
        backCameraId = i;
      }
      else if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
        frontCameraId = i;
      }
    }
    int id = -1;
    if (frontCameraId != -1) { // フロントカメラを指定
      id = frontCameraId;
    }
    // if (backCameraId != -1) { / バックカメラを指定
    // id = backCameraId;
    //}
    if (id >= 0) {
      mCamera = Camera.open(id);
    }
    else {
      mCamera = Camera.open();
    }
    try {
      mCamera.setPreviewDisplay(holder);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    // プレビュー画面のサイズ設定
    Camera.Parameters params = mCamera.getParameters();
    List<Size> previewSizes = params.getSupportedPreviewSizes();
    Size size = previewSizes.get(0);
    params.setPreviewSize(size.width, size.height);
    mCamera.setParameters(params);
    // プレビュー開始
    mCamera.startPreview();
  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
  }
}



コメントをかく


ユーザーIDでかく場合はこちら
「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

AD



管理人のみ編集できます