Androidの写真をアルバムへ保存
写真をアルバムへ保存するには
Cameraクラスの
takePicture()を使って写真を撮影し
これで得たbyte配列のデータをJPGへ変換して保存する
まずは、カメラプレビューの実装し
次に、写真を撮影
写真の撮影にはtakePicture()を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 ; } }); |
次に、画像の保存先の設定
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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へ権限を追記する
1 | < uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> |
次に、設定した保存バスを元に
FileOutputStream の
write()で画像データを書き込む
書き込み後はギャラリーへ反映するため
ContentProviderの更新をする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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データの画像をコールバックとして返す