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宣言以外にアプリ側でも許可が必要となっている
設定方法:設定/アプリ/使用アプリを選択/許可/ストレージ
