Java活用生活

ログイン

オンライン状況

オンラインユーザー1人
ログインユーザー0人
登録ユーザー2人

カウンタ

COUNTER335467

Androidスニペット

Androidスニペット >> 記事詳細
2023/05/22

画像をバイト配列にしたデータで、MediaStoreに保存する

固定リンク | by:aramaki
画像の保存パスと、画像をバイト配列にしたデータを指定して、MediaStoreに保存する
@param context 呼び出し元コンテキスト
@param imgPath 画像ファイルの絶対パス
@param data     画像データのバイト配列
@return boolean 保存されているか 保存されたtrue 保存されていないfalse

public static boolean save2sdcard(Context context, String imgPath, byte[] data) {
FileOutputStream fileOutputStream = null;

OutputStream outputStream = null;
ContentValues values = null;
ContentResolver resolver = null;
Uri uri = null;
// 処理結果
boolean result = false;

if (!hasSDCard()) {
    return false;
}
if(!isExternalStorageWritable()){
    return false;
}

try {
    final boolean is10 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
    // Android9以前の場合はfalseを返す
    // Android9以前の場合
    if (!is10) {
        Log.e("Android Version Error", "Your OS IS under Androi10");
        //   return false;
    } else {
        // Android10の場合
        String fileName = getSaveFileName(imgPath);
        values = new ContentValues();
        values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
        //values.put("data",imgPath);
        values.put(MediaStore.Images.Media.DATA, imgPath);

        // 書込み時にメディア ファイルに排他的にアクセスする
        values.put(MediaStore.Images.Media.IS_PENDING, 1);

        resolver = context.getContentResolver();
        Uri collection=MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);

        // 外部メディア参照
        Uri item = resolver.insert(collection, values);

        outputStream = resolver.openOutputStream(item);
        outputStream.write(data);

        values.clear();
        // 排他的にアクセスの解除
        values.put(MediaStore.Images.Media.IS_PENDING, 0);
        resolver.update(item, values, null, null);

        result = true;

    }

} catch (FileNotFoundException e) {
    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q){
        resolver.delete(uri,null,null);
    }
    e.printStackTrace();
    throw new IllegalStateException(e);
} catch (IOException e) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
        resolver.delete(uri, null, null);
    }
    e.printStackTrace();
}catch (Exception e){
    e.printStackTrace();

}finally {
    if(outputStream!=null){
        try {
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

return result;
}
public static boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
return (Environment.MEDIA_MOUNTED.equals(state));
}
22:07