Androidの写真をアルバムへ保存
写真をアルバムへ保存するには
Cameraクラスの
takePicture()を使って写真を撮影し
これで得たbyte配列のデータをJPGへ変換して保存する
まずは、カメラプレビューの実装し
次に、写真を撮影
写真の撮影にはtakePicture()を使う
mSurfaceView.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
if(mCamera !=null){
//前回撮影した画像を保存できない場合
if(!mIsSave){
mCamera.takePicture(null,null, mPictureCallback);
mIsSave = true;
}
}
}
return true;
}
});
次に、画像の保存先の設定
String savePath = Environment.getExternalStorageDirectory().getPath() + "SAVE_PATH";
File file = new File(saveFile);
if(!file.exists()){
file.mkdir();
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
String imgPath = savePath +"/"+ "IMG_"+sdFormat.format(cal.getTime())+".jpg";
ちなみに、microSDに保存するときには
権限が必要になるため
AndroidManifest.xmlへ権限を追記する
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
次に、設定した保存バスを元に
FileOutputStream の
write()で画像データを書き込む
書き込み後はギャラリーへ反映するため
ContentProviderの更新をする
try{
FileOutputStream fos = new FileOutputStream(imgPath, true);
fos.write(data);
fos.close();
//ContentProvider update
ContentValues values = new ContentValues();
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data",imgPath);
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}catch(Exception e){
}
takePicture()には
3つのコールバック、つまり行う挙動を指定できる
Camera.ShutterCallback
キャプチャした瞬間、コールバックを返す
Camera.PictureCallback
撮影したrawデータの画像をコールバックとして返す
Camera.PictureCallback
撮影したjpegデータの画像をコールバックとして返す