Android/ストレージ/sdカードに画像保存
提供: 初心者エンジニアの簡易メモ
- AndroidManivest.xmlに追加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- src/info/nonip/android/lib/entity/SdcardEntity.java
package info.nonip.android.lib.entity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; /** * SDカードエンティティ * * @ex * SdcardEntity sdcard = SdcardEntity.getInstance(); * sdcard.setDir("hoge");// sdカード内にhogeディレクトリを作成 * sdcard.saveBitmapPng(bitmap, "fuga"); */ public class SdcardEntity { // このクラスに唯一のインスタンス private static SdcardEntity singleton = new SdcardEntity(); // SDカードrootpath private File mSdDirPath; // dirパス private String mDirPath; // newでのインスタンス生成防止 private SdcardEntity() { // sdcardフォルダを指定 mSdDirPath = Environment.getExternalStorageDirectory(); } // インスタンス取得メソッド public static SdcardEntity getInstance() { return singleton; } // dirpath設定 public void setDirPath(String dir) { mDirPath = mSdDirPath + "/" + dir; // dir生成 mkdir(); } // png画像保存 public String saveBitmapPng(Bitmap mBitmap, String filepath) { String uristr = null; try { // 保存処理開始 FileOutputStream fos = null; // fos = new FileOutputStream(new File(sdpath, fileName.format(mDate) + ".png")); // 保存uri uristr = mDirPath + "/"+ filepath + ".png"; fos = new FileOutputStream(new File(uristr)); // jpegで保存 // mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); // 画像解放 mBitmap = null; // 保存処理終了 fos.close(); } catch (IOException e) { Log.e("SdcardUtil", "" + e.toString()); } Log.d("SdcardUtil", "sdcard save=" + uristr); return uristr; } // jpg画像保存 public String saveBitmapJpg(Bitmap mBitmap, String filepath) { String uristr = null; try { // 保存処理開始 FileOutputStream fos = null; // 保存uri uristr = mDirPath + "/"+ filepath + ".jpg"; fos = new FileOutputStream(new File(uristr)); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); // 画像解放 mBitmap = null; // 保存処理終了 fos.close(); } catch (IOException e) { Log.e("SdcardUtil", "" + e.toString()); } Log.d("SdcardUtil", "sdcard save=" + uristr); return uristr; } // ディレクトリ作成 public void mkdir() { File dir = new File(mDirPath); if (!dir.exists()) { dir.mkdirs(); } Log.d("SdcardUtil", "mkdir=" + mDirPath); } // ファイルリスト取得 public ArrayList<String> getFiles() { ArrayList<String> imgList = new ArrayList<String>(); try { //選択ボックスで表示するファイル名のリストを作成 File dir = new File(mDirPath); final File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; Log.d("SdcardUtil", "filepath=" + mDirPath + "/" + file.getName()); imgList.add(mDirPath + "/" + file.getName()); } return imgList; } catch (NullPointerException e) { Log.e("SdcardUtil", "NullPointerException ストレージがマウントされていないか確認"); return imgList; } } // 指定dir内のファイル削除 public void delFiles() { ArrayList<String> paths = getFiles(); for (String path : paths) { File file = new File(path); file.delete(); } } // filepathから画像取得 public Bitmap getBitmapByPath(String filepath) { String uristr = mDirPath + "/"+ filepath; File f = new File(uristr); BitmapFactory.Options bmOp = new BitmapFactory.Options(); //bmOp.inSampleSize = 20; return BitmapFactory.decodeFile(f.getPath(), bmOp); } }
open failed: EACCES (Permission denied) エラーが出る場合
android6以上の場合はmanifest宣言以外にアプリ側でも許可が必要となっている
設定方法:設定/アプリ/使用アプリを選択/許可/ストレージ