最終更新:
moonlight_aska 2014年11月03日(月) 17:50:34履歴
Android 2.3から複数のカメラがサポートされた.
フロントカメラやバックカメラを指定してカメラを起動するには, CameraInfoクラスを利用する.
フロントカメラやバックカメラを指定してカメラを起動するには, CameraInfoクラスを利用する.
- 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;
}
}
コメントをかく