package com.wenming.weiswift.utils;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.widget.Toast;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* 与保存相关的工具类
* Created by xiang on 16-7-5.
* Usage:
* 保存是个耗时操作,最好放在子线程执行,防止发生ANR
* 默认图片保存目录是/sdcard/Android/data/com.wenming.weiswift.file/Pictures/weibo
* 最好设置一下fileName
* SaveImgUtil.create(context)
* // 缺省
* //.setOutputDirectory(directory)
* //.setImageFormat(format)
* //.setImageQuality(quality)
* //.setFileName(name)
* .saveImage(bitmap)
*/
public class SaveImgUtil {
private static final String TAG = SaveImgUtil.class.getSimpleName();
private static final int IMG_DEFAULT_QUALITY = 100;
private static final String FOLDER_NAME = "WeiSwiftPic";
/**
* Save a file in internal storage or external storage
*/
private File mOutputDirectory;
/**
* The format of the picture which will be saved
*/
private Bitmap.CompressFormat mFormat;
/**
* The quality of the picture saved.
*/
private int mQuality;
/**
* The name of the file saved
*/
private String mFileName;
private Context mContext;
private static SaveImgUtil mSaveUtil;
private SaveImgUtil(Context context) {
this.mOutputDirectory = getDirectory(context, FOLDER_NAME);
this.mFormat = Bitmap.CompressFormat.PNG;
this.mContext = context;
this.mQuality = IMG_DEFAULT_QUALITY;
this.mFileName = System.currentTimeMillis() + ".png";
}
public static SaveImgUtil create(Context context) {
if (mSaveUtil == null) {
mSaveUtil = new SaveImgUtil(context);
}
return mSaveUtil;
}
/**
* @param directory 文件保存路径
* Internal Storage(only access by your own app)
* context.getFilesDir()
* context.getCacheDir()
* External Storage(when use this, should first check isSDCardEnable)
* Environment.getExternalStoragePublicDirectory
* context.getExternalFilesDir
* @return
*/
public SaveImgUtil setOutputDirectory(File directory) {
this.mOutputDirectory = directory;
return this;
}
/**
* @param format 图片保存格式
* @return
*/
public SaveImgUtil setImageFormat(Bitmap.CompressFormat format) {
this.mFormat = format;
return this;
}
/**
* @param quality 图片质量
* @return
*/
public SaveImgUtil setImageQuality(int quality) {
this.mQuality = quality;
return this;
}
/**
* @param fileName 文件名
* @return
*/
public SaveImgUtil setFileName(String fileName) {
this.mFileName = fileName;
return this;
}
/**
* @param bitmap 保存Bitmap
*/
public void saveImage(File imgFile, Bitmap bitmap) {
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), "weiSwiftImg");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
// 其次把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(mContext.getContentResolver(), file.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + appDir)));
Toast.makeText(mContext, "保存成功!", Toast.LENGTH_SHORT).show();
}
/**
* 创建保存图片的目录
*
* @param context
* @param folderName
* @return
*/
private File getDirectory(Context context, String folderName) {
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), folderName);
if (!file.mkdirs()) {
LogUtil.e(TAG, "Directory not created");
}
return file;
}
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
ToastUtil.showShort(mContext, "保存成功");
}
};
}