package org.android.textbook.lesson4.camerasample;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
public class CameraSampleActivity extends Activity implements OnClickListener {
private Camera mCamera;
private CameraPreview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// フルスクリーン表示にします
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_camera_sample);
mPreview = new CameraPreview(this);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
// 撮影ボタンのクリックリスナーを登録
Button button = (Button) findViewById(R.id.button_capture);
button.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
mCamera = getCameraInstance();
mPreview.setCamera(mCamera);
}
@Override
protected void onPause() {
super.onPause();
// カメラデバイスの使用停止
if (mCamera != null) {
mCamera.release();
mCamera = null;
mPreview.setCamera(null);
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.button_capture) {
mCamera.takePicture(mShutter, mRawPicture, mJpegPicture);
}
}
/**
* Cameraクラスのオブジェクトを取得します
*
* @return Camera、もし、デバイスが未対応の場合、nullを返します
*/
public static Camera getCameraInstance() {
Camera camera = null;
try {
// Cameraクラスのオブジェクトを取得する
camera = Camera.open();
} catch (Exception e) {
// オブジェクトが生成できない場合、Exceptionが発生する
}
return camera;
}
private ShutterCallback mShutter = new ShutterCallback() {
@Override
public void onShutter() {
// シャッター音を鳴動させます
}
};
private PictureCallback mRawPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 撮影後、圧縮前のRawデータを受け取ることができます。
// プレビュー再開
mCamera.startPreview();
}
};
private PictureCallback mJpegPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 圧縮後のJpegデータを受け取ることができます。
File path = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File pictureFile = new File(path, "camera_sample.jpg");
android.util.Log.e("", "" + pictureFile.exists());
try {
FileOutputStream fos = new
FileOutputStream(pictureFile);
fos.write(data);
fos.close();
// コンテンツの登録
ContentValues values = new ContentValues();
ContentResolver contentResolver = getContentResolver();
values.put(MediaStore.MediaColumns.DATA, pictureFile.getPath());
values.put(MediaStore.MediaColumns.TITLE, "camera_sample.jpg");
values.put(MediaStore.MediaColumns.SIZE, data.length);
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
catch (FileNotFoundException e) {
// 失敗
} catch (IOException e) {
// 失敗
}
// プレビュー再開
mCamera.startPreview();
}
};
}