现在项目中基本都有这样的需求,把图片保存到本地相册
这是一个工具类代码如下:
public class ImgUtils {
/**
* 保存文件到指定路径
*/
public static boolean saveImageToGallery(Context context, Bitmap bmp){
// 首先保存图片
String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dearxy";
File appDir = new File(storePath);
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
//通过io流的方式来压缩保存图片
boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);
fos.flush();
fos.close();
//把文件插入到系统图库
//MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
//保存图片后发送广播通知更新数据库
Uri uri = Uri.fromFile(file);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
if (isSuccess) {
return true;
} else {
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
Android 6.0的手机需要先申请权限,拿到权限后再保存,否则会失败
添加依赖
compile ‘pub.devrel:easypermissions:0.3.0’
实现EasyPermissions.PermissionCallbacks,重写获取权限的方法
@OnClick(R.id.save)
public void save() {
requestPermission();
}
/**
* 请求读取sd卡的权限
*/
private void requestPermission() {
if (Build.VERSION.SDK_INT >= 23) {
//读取sd卡的权限
String[] mPermissionList = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(getApplicationContext(), mPermissionList)) {
//已经同意过
saveImage();
} else {
//未同意过,或者说是拒绝了,再次申请权限
EasyPermissions.requestPermissions(
this, //上下文
"保存图片需要读取sd卡的权限", //提示文言
REQUEST_CODE_SAVE_IMG, //请求码
mPermissionList //权限列表
);
}
} else {
saveImage();
}
}
/**
* 保存图片
*/
private void saveImage() {
System.out.println(" 6666 ");
System.out.println(current + " current ");
final String urls = imagesUrl.get(current);
System.out.println(urls + " url ");
System.out.println(" 8888 ");
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.fj);
new Thread(new Runnable() {
Bitmap bitmap = null;
@Override
public void run() {
URL url = null;
try {
url = new URL("http://test.zuihou99.com" + urls);
InputStream is = null;
BufferedInputStream bis = null;
try {
is = url.openConnection().getInputStream();
bis = new BufferedInputStream(is);
bitmap = BitmapFactory.decodeStream(bis);
boolean isSaveSuccess = ImgUtils.saveImageToGallery(getApplicationContext(), bitmap);
if (isSaveSuccess) {
Looper.prepare();
Toast.makeText(getApplicationContext(), "保存图片成功", Toast.LENGTH_SHORT).show();
Looper.loop();
} else {
Looper.prepare();
Toast.makeText(getApplicationContext(), "保存图片失败,请稍后重试", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}).start();
}
/**
* 根据图片的url路径获得Bitmap对象
*
* @param url
* @return
*/
private Bitmap decodeUriAsBitmapFromNet(String url) {
URL fileUrl = null;
Bitmap bitmap = null;
try {
fileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) fileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
//授权结果,分发下去
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
//跳转到onPermissionsGranted或者onPermissionsDenied去回调授权结果
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
//同意授权
@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
saveImage();
}
//拒绝授权
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
//打开系统设置,手动授权
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
//拒绝授权后,从系统设置了授权后,返回APP进行相应的操作
saveImage();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
ButterKnife.bind(this);
}
这样就可以了,有不对的欢迎指出
这里附上源码http://download.youkuaiyun.com/download/qq_23668969/10042303