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上傳多張圖片的實(shí)例代碼(RxJava異步分發(fā))
本篇文章主要介紹了Android上傳多張圖片的實(shí)例代碼(RxJava異步分發(fā)),具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Android獲取、更改包名的小技巧分享(超實(shí)用)
這篇文章主要給大家分享介紹了關(guān)于利用Android更改包名的一個(gè)小技巧,通過這個(gè)方法大家可以很方便的修改包名,再也不用為頻繁修改包名而感到頭疼,文中還給大家分享利一個(gè)android獲取手機(jī)所有應(yīng)用包名的方法,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12Android RecyclerView上拉加載和下拉刷新(基礎(chǔ)版)
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView上拉加載和下拉刷新的相實(shí)現(xiàn)方法,內(nèi)容簡(jiǎn)單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02分享Android平板電腦上開發(fā)應(yīng)用程序不能全屏顯示的問題解決
在一個(gè)8寸屏的Android平板電腦上開發(fā)應(yīng)用程序(游戲程序),開始的時(shí)候,總是不能全屏顯示,也不知道怎么設(shè)置才可以2013-05-05Android控件之SlidingDrawer(滑動(dòng)式抽屜)詳解與實(shí)例分享
這篇文章詳細(xì)介紹了Android控件之SlidingDrawer(滑動(dòng)式抽屜)與實(shí)例,有需要的朋友可以參考一下2013-10-10Android實(shí)現(xiàn)登錄功能demo示例
這篇文章主要介紹了Android實(shí)現(xiàn)登錄功能demo示例,涉及登錄信息操作、界面布局、登錄邏輯判斷等相關(guān)操作技巧,需要的朋友可以參考下2016-07-07分享Android 藍(lán)牙4.0(ble)開發(fā)的解決方案
這篇文章主要為大家分享了Android 藍(lán)牙4.0(ble)開發(fā)的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03Android高仿2048小游戲?qū)崿F(xiàn)代碼
這篇文章主要介紹了Android高仿2048小游戲?qū)崿F(xiàn)代碼的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10