2012年1月6日金曜日

フロントカメラと背面カメラの同時表示

二つのカメラを同時に利用できるか、試してみました。
AVDでは利用できるようです。実機では試していません。


別に特別な事は必要ありませんでした。
以外に簡単でした。

package com.android.camera2;

import java.util.List;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Android2CameraActivity extends Activity {
 private Camera camera;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  SurfaceView mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
  SurfaceHolder holder = mySurfaceView.getHolder();
  holder.addCallback(mSurfaceListener);
  holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

  SurfaceView mySurfaceView2 = (SurfaceView) findViewById(R.id.surfaceView2);
  SurfaceHolder holder2 = mySurfaceView2.getHolder();
  holder2.addCallback(mSurfaceListener2);
  holder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
  // カメラの総数
  int numberOfCameras = Camera.getNumberOfCameras();
  Log.d("個数", String.valueOf(numberOfCameras));

 }

 private SurfaceHolder.Callback mSurfaceListener = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera = Camera.open(0);
   try {
    camera.setPreviewDisplay(holder);
   } catch (Exception e) {
    e.printStackTrace();
    Log.d("エラー", "001" );
   }
  }

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

  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   // TODO Auto-generated method stub
   Log.d("サーフェイスサイズ", "w=" + String.valueOf(width) + "h=" + height);// 320x180

   camera.stopPreview();

   // camera.setDisplayOrientation(90);// カメラを回転
   Camera.Parameters parameters = camera.getParameters();
   List<Camera.Size> size = parameters.getSupportedPreviewSizes();

   Log.d("カメラのサイズ", "w=" + String.valueOf(size.get(0).width) + "h="
     + String.valueOf(size.get(0).height));// 
   parameters.setPreviewSize(size.get(0).width, size.get(0).height);
   camera.setParameters(parameters);
   camera.startPreview();
  }
 };

 /*
  * 
  */
 private SurfaceHolder.Callback mSurfaceListener2 = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera = Camera.open(1);
   try {
    camera.setPreviewDisplay(holder);
   } catch (Exception e) {
    e.printStackTrace();
    Log.d("エラー", "001" );
   }
  }

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

  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   // TODO Auto-generated method stub
   Log.d("サーフェイスサイズ", "w=" + String.valueOf(width) + "h=" + height);

   camera.stopPreview();

   // camera.setDisplayOrientation(90);// カメラを回転
   Camera.Parameters parameters = camera.getParameters();
   List<Camera.Size> size = parameters.getSupportedPreviewSizes();

   Log.d("カメラのサイズ", "w=" + String.valueOf(size.get(0).width) + "h="
     + String.valueOf(size.get(0).height));// 
   parameters.setPreviewSize(size.get(0).width, size.get(0).height);
   camera.setParameters(parameters);
   camera.startPreview();
  }
 };


}

関連記事

0 件のコメント:

コメントを投稿