Android開發(fā)實現(xiàn)保存圖片到手機相冊功能
本文實例講述了Android開發(fā)實現(xiàn)保存圖片到手機相冊功能。分享給大家供大家參考,具體如下:
有一種很常見的需求,當保存圖片的時候,客戶需要在相冊里面看到那張圖片。有時候確實是保存成功了(通過IO流將圖片寫入了SDCard),但打開相冊卻看不到那張圖片,需要在文件管理軟件上才能找到那張圖片,在網(wǎng)上找了許多文章,貌似都保存不到相冊那里,這應該就是手機品牌的原因,有的品牌的手機能顯示在相冊里,有的品牌的手機卻不能。解決這種問題,最簡單粗暴的方法是,用那臺手機拍一張照片,然后找到它,查看它的路徑詳情,直接根據(jù)路徑用IO流寫入,Android SDK 的 Build.BRAND 變量為當前手機的品牌,根據(jù)不同的品牌來做兼容處理,如果有讀者用了這篇文章的代碼還是不能在相冊顯示,可以對著這個思路來做兼容。另外值得一提的是,圖片格式需要為JPEG格式才能顯示在相冊中,我們拍的照片也是JPEG格式的。下面用代碼來實現(xiàn)上述的想法。
鑒于目前手機的版本普遍為Android 6.0 以上,讀寫外部存儲文件都需要動態(tài)申請權(quán)限。這部分代碼可以在當前需要讀寫外部存儲文件的Activity中寫。
String[] PERMISSIONS = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
//檢測是否有寫的權(quán)限
int permission = ContextCompat.checkSelfPermission(this,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 沒有寫的權(quán)限,去申請寫的權(quán)限,會彈出對話框
ActivityCompat.requestPermissions(this, PERMISSIONS,1);
}
保存文件的方法:
public void SaveBitmapFromView(View view) {
int w = view.getWidth();
int h = view.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
view.layout(0, 0, w, h);
view.draw(c);
// 縮小圖片
Matrix matrix = new Matrix();
matrix.postScale(0.5f,0.5f); //長和寬放大縮小的比例
bmp = Bitmap.createBitmap(bmp,0,0, bmp.getWidth(),bmp.getHeight(),matrix,true);
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
saveBitmap(bmp,format.format(new Date())+".JPEG");
}
/*
* 保存文件,文件名為當前日期
*/
Public void saveBitmap(Bitmap bitmap, String bitName){
String fileName ;
File file ;
if(Build.BRAND .equals("Xiaomi") ){ // 小米手機
fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+bitName ;
}else{ // Meizu 、Oppo
fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+bitName ;
}
file = new File(fileName);
if(file.exists()){
file.delete();
}
FileOutputStream out;
try{
out = new FileOutputStream(file);
// 格式為 JPEG,照相機拍出的圖片為JPEG格式的,PNG格式的不能顯示在相冊中
if(bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out))
{
out.flush();
out.close();
// 插入圖庫
MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), bitName, null);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
// 發(fā)送廣播,通知刷新圖庫的顯示
this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));
}
以上就是保存圖片到相冊的方式,代碼寫在Activity類中,而我們只要稍微封裝一下這些代碼到你的ImageUtil 或者 FileUtil那樣類里面,你就可以方便地運用到你的項目中了,這里我就不封裝了。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android OpenGL ES實現(xiàn)簡單綠幕摳圖
這篇文章主要為大家介紹了Android OpenGL ES實現(xiàn)簡單綠幕摳圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
android端微信支付V3版本地簽名統(tǒng)一下單詳解
本篇文章主要介紹了android端微信支付V3版本地簽名統(tǒng)一下單,具有一定的參考價值,有興趣的同學可以了解一下。2016-11-11
Android編程開發(fā)之TextView單擊鏈接彈出Activity的方法
這篇文章主要介紹了Android編程開發(fā)之TextView單擊鏈接彈出Activity的方法,涉及Android中TextView控件的相關(guān)操作技巧,需要的朋友可以參考下2016-01-01
android JSON解析數(shù)據(jù) android解析天氣預報
這篇文章主要為大家詳細介紹了android JSON解析數(shù)據(jù),android天氣預報JSON數(shù)據(jù)解析,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
關(guān)于Android CountDownTimer的使用及注意事項
這篇文章主要介紹了關(guān)于Android CountDownTimer的使用及注意事項,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Android Zipalign工具優(yōu)化Android APK應用
本文主要介紹Android Zipalign工具優(yōu)化Android APK應用,這里整理了相關(guān)資料及簡單優(yōu)化實例,有需要的小伙伴可以參考下2016-09-09
Android入門之ActivityGroup+GridView實現(xiàn)Tab分頁標簽的方法
這篇文章主要介紹了Android入門之ActivityGroup+GridView實現(xiàn)Tab分頁標簽的方法,非常實用的功能,需要的朋友可以參考下2014-08-08

