溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android開發(fā)實(shí)現(xiàn)保存圖片到手機(jī)相冊功能

發(fā)布時間:2020-10-11 16:50:40 來源:腳本之家 閱讀:383 作者:NotMYida 欄目:移動開發(fā)

本文實(shí)例講述了Android開發(fā)實(shí)現(xiàn)保存圖片到手機(jī)相冊功能。分享給大家供大家參考,具體如下:

有一種很常見的需求,當(dāng)保存圖片的時候,客戶需要在相冊里面看到那張圖片。有時候確實(shí)是保存成功了(通過IO流將圖片寫入了SDCard),但打開相冊卻看不到那張圖片,需要在文件管理軟件上才能找到那張圖片,在網(wǎng)上找了許多文章,貌似都保存不到相冊那里,這應(yīng)該就是手機(jī)品牌的原因,有的品牌的手機(jī)能顯示在相冊里,有的品牌的手機(jī)卻不能。解決這種問題,最簡單粗暴的方法是,用那臺手機(jī)拍一張照片,然后找到它,查看它的路徑詳情,直接根據(jù)路徑用IO流寫入,Android SDK 的 Build.BRAND 變量為當(dāng)前手機(jī)的品牌,根據(jù)不同的品牌來做兼容處理,如果有讀者用了這篇文章的代碼還是不能在相冊顯示,可以對著這個思路來做兼容。另外值得一提的是,圖片格式需要為JPEG格式才能顯示在相冊中,我們拍的照片也是JPEG格式的。下面用代碼來實(shí)現(xiàn)上述的想法。

鑒于目前手機(jī)的版本普遍為Android 6.0 以上,讀寫外部存儲文件都需要動態(tài)申請權(quán)限。這部分代碼可以在當(dāng)前需要讀寫外部存儲文件的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");
}
/*
 * 保存文件,文件名為當(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格式的不能顯示在相冊中
      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那樣類里面,你就可以方便地運(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é)》

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI