Android開發(fā)實(shí)現(xiàn)保存圖片到手機(jī)相冊(cè)功能
本文實(shí)例講述了Android開發(fā)實(shí)現(xiàn)保存圖片到手機(jī)相冊(cè)功能。分享給大家供大家參考,具體如下:
有一種很常見的需求,當(dāng)保存圖片的時(shí)候,客戶需要在相冊(cè)里面看到那張圖片。有時(shí)候確實(shí)是保存成功了(通過IO流將圖片寫入了SDCard),但打開相冊(cè)卻看不到那張圖片,需要在文件管理軟件上才能找到那張圖片,在網(wǎng)上找了許多文章,貌似都保存不到相冊(cè)那里,這應(yīng)該就是手機(jī)品牌的原因,有的品牌的手機(jī)能顯示在相冊(cè)里,有的品牌的手機(jī)卻不能。解決這種問題,最簡(jiǎn)單粗暴的方法是,用那臺(tái)手機(jī)拍一張照片,然后找到它,查看它的路徑詳情,直接根據(jù)路徑用IO流寫入,Android SDK 的 Build.BRAND 變量為當(dāng)前手機(jī)的品牌,根據(jù)不同的品牌來做兼容處理,如果有讀者用了這篇文章的代碼還是不能在相冊(cè)顯示,可以對(duì)著這個(gè)思路來做兼容。另外值得一提的是,圖片格式需要為JPEG格式才能顯示在相冊(cè)中,我們拍的照片也是JPEG格式的。下面用代碼來實(shí)現(xiàn)上述的想法。
鑒于目前手機(jī)的版本普遍為Android 6.0 以上,讀寫外部存儲(chǔ)文件都需要?jiǎng)討B(tài)申請(qǐng)權(quán)限。這部分代碼可以在當(dāng)前需要讀寫外部存儲(chǔ)文件的Activity中寫。
String[] PERMISSIONS = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
//檢測(cè)是否有寫的權(quán)限
int permission = ContextCompat.checkSelfPermission(this,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 沒有寫的權(quán)限,去申請(qǐng)寫的權(quán)限,會(huì)彈出對(duì)話框
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");
}
/*
* 保存文件,文件名為當(dāng)前日期
*/
Public void saveBitmap(Bitmap bitmap, String bitName){
String fileName ;
File file ;
if(Build.BRAND .equals("Xiaomi") ){ // 小米手機(jī)
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,照相機(jī)拍出的圖片為JPEG格式的,PNG格式的不能顯示在相冊(cè)中
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)));
}
以上就是保存圖片到相冊(cè)的方式,代碼寫在Activity類中,而我們只要稍微封裝一下這些代碼到你的ImageUtil 或者 FileUtil那樣類里面,你就可以方便地運(yùn)用到你的項(xiàng)目中了,這里我就不封裝了。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android OpenGL ES實(shí)現(xiàn)簡(jiǎn)單綠幕摳圖
這篇文章主要為大家介紹了Android OpenGL ES實(shí)現(xiàn)簡(jiǎn)單綠幕摳圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
android端微信支付V3版本地簽名統(tǒng)一下單詳解
本篇文章主要介紹了android端微信支付V3版本地簽名統(tǒng)一下單,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下。2016-11-11
Android如何在App中啟動(dòng)系統(tǒng)鬧鐘
這篇文章主要為大家詳細(xì)介紹了Android如何在App中啟動(dòng)系統(tǒng)鬧鐘,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Android編程開發(fā)之TextView單擊鏈接彈出Activity的方法
這篇文章主要介紹了Android編程開發(fā)之TextView單擊鏈接彈出Activity的方法,涉及Android中TextView控件的相關(guān)操作技巧,需要的朋友可以參考下2016-01-01
android JSON解析數(shù)據(jù) android解析天氣預(yù)報(bào)
這篇文章主要為大家詳細(xì)介紹了android JSON解析數(shù)據(jù),android天氣預(yù)報(bào)JSON數(shù)據(jù)解析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
關(guān)于Android CountDownTimer的使用及注意事項(xiàng)
這篇文章主要介紹了關(guān)于Android CountDownTimer的使用及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Android Zipalign工具優(yōu)化Android APK應(yīng)用
本文主要介紹Android Zipalign工具優(yōu)化Android APK應(yīng)用,這里整理了相關(guān)資料及簡(jiǎn)單優(yōu)化實(shí)例,有需要的小伙伴可以參考下2016-09-09
Android入門之ActivityGroup+GridView實(shí)現(xiàn)Tab分頁標(biāo)簽的方法
這篇文章主要介紹了Android入門之ActivityGroup+GridView實(shí)現(xiàn)Tab分頁標(biāo)簽的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08
TextView實(shí)現(xiàn)跑馬燈效果 就這么簡(jiǎn)單!
TextView實(shí)現(xiàn)跑馬燈效果,就這么簡(jiǎn)單輕松實(shí)現(xiàn),這篇文章介紹了TextView制作跑馬燈效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

