文 | Promise Sun
一、描述
APP需要實(shí)現(xiàn)用戶手動(dòng)將圖片保存到手機(jī)相冊(cè)/圖庫(kù)
注:Android11 測(cè)試有效
二、實(shí)現(xiàn)
直接調(diào)用下面的方法即可
/*
* 將圖片 bitmap保存到圖庫(kù)
*/
public static void saveBitmap(Context activity,Bitmap bitmap) {
//因?yàn)閤ml用的是背景,所以這里也是獲得背景
//獲取參數(shù)Bitmap方式一: Bitmap bitmap=((BitmapDrawable)(imageView.getBackground())).getBitmap();
//獲取參數(shù)Bitmap方式二: Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
//t設(shè)置圖片名稱(chēng),要保存png,這里后綴就是png,要保存jpg,后綴就用jpg
String imageName = System.currentTimeMillis() + "code.png";
//創(chuàng)建文件,安卓低版本的方式
// File file=new File(Environment.getExternalStorageDirectory() +"/test.png");
//Android Q 10為每個(gè)應(yīng)用程序提供了一個(gè)獨(dú)立的在外部存儲(chǔ)設(shè)備的存儲(chǔ)沙箱,沒(méi)有其他應(yīng)用可以直接訪問(wèn)您應(yīng)用的沙盒文件
File f = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File file = new File(f.getPath() + "/"+imageName);//創(chuàng)建文件
// file.getParentFile().mkdirs();
try {
//文件輸出流
FileOutputStream fileOutputStream = new FileOutputStream(file);
//壓縮圖片,如果要保存png,就用Bitmap.CompressFormat.PNG,要保存jpg就用Bitmap.CompressFormat.JPEG,質(zhì)量是100%,表示不壓縮
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
//寫(xiě)入,這里會(huì)卡頓,因?yàn)閳D片較大
fileOutputStream.flush();
//記得要關(guān)閉寫(xiě)入流
fileOutputStream.close();
//成功的提示,寫(xiě)入成功后,請(qǐng)?jiān)趯?duì)應(yīng)目錄中找保存的圖片
Log.e("寫(xiě)入成功!位置目錄", f.getPath() + "/"+imageName);
} catch (FileNotFoundException e) {
e.printStackTrace();
//失敗的提示,這里的Toast工具類(lèi),大家用自己項(xiàng)目中的即可,若不需要可以刪除
ToastUtil.showToast(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
//失敗的提示
ToastUtil.showToast(e.getMessage());
}
// 下面的步驟必須有,不然在相冊(cè)里找不到圖片,若不需要讓用戶知道你保存了圖片,可以不寫(xiě)下面的代碼。
// 把文件插入到系統(tǒng)圖庫(kù)
try {
MediaStore.Images.Media.insertImage(activity.getContentResolver(),
file.getAbsolutePath(), imageName, null);
ToastUtil.showToast( "保存成功,請(qǐng)您到 相冊(cè)/圖庫(kù) 中查看");
} catch (FileNotFoundException e) {
ToastUtil.showToast( "保存失敗");
e.printStackTrace();
}
// 最后通知圖庫(kù)更新
activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(file.getPath()))));
}
Note:不會(huì)獲取圖片Bitmap 參數(shù)的同學(xué)可以參考以下方式:
(下面的imageView是你的布局文件中的ImageView的id)
1)方式一:如果你的圖片來(lái)自于網(wǎng)絡(luò),該 url 以圖片的形式已經(jīng)顯示在app上了,此時(shí)需要保存這張圖片時(shí),將圖片轉(zhuǎn)換成Bitmap
Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
2)方式二:如果你的圖片是app本地的圖片,需要保存這張圖片時(shí),將圖片轉(zhuǎn)換成Bitmap
若ImageView的屬性設(shè)置了 android:background="@drawable/qr_code",使用下面的方式
Bitmap bitmap=((BitmapDrawable)(imageView.getBackground())).getBitmap();
若ImageView的屬性設(shè)置了 android:src="@drawable/qr_code",使用下面的方式
Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
三、示例(僅供參考):

保存.jpg
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)點(diǎn)贊此文并注明出處,謝謝!