91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何適配AndroidQ拍照和讀取相冊圖片?

發布時間:2020-06-23 13:36:11 來源:億速云 閱讀:424 作者:清晨 欄目:開發技術

不懂如何適配AndroidQ拍照和讀取相冊圖片??其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

Google發行Android Q版本也有很長一段時間了,華為應用市場已經要求要適配Android Q版本了,所以,我們也要去對Android Q進行適配。

先講一下咱們這節用到的新特性

  • Android Q文件存儲機制修改成了沙盒模式,類似于iOS
  • 應用只能訪問自己沙盒下的文件和公共媒體文件

如果有想具體了解Android Q新版特效的可以去 官方文檔
我們在這個地方記錄一下Android Q版本進行拍照保存到相冊的功能。

權限問題

Android Q不再需要申請文件讀寫權限,默認可以讀寫自己沙盒文件和公共媒體文件。因為相冊屬于公共媒體文件,所以,Android Q 可以不用 再動態申請權限。但是Android Q以下版本必須要申請權限才可以訪問。

拍照

圖片正常保存

拍照:Android Q之前版本使用的,將圖片保存到指定文件夾,拍照完成后需要通知相冊刷新

拍照代碼

// 拍照存放路徑
    File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
    if (!fileDir.exists()) {
      fileDir.mkdir();
    }

 //圖片名稱
    String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg";
    //跳轉到相機
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri uri;
    //適配Android N之后版本
    if (Build.VERSION.SDK_INT >= 24) {
      uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath));
    } else {
    //適配Android N版本之前
      uri = Uri.fromFile(new File(mFilePath));
    }
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    //跳轉,需要在onActivityResult進行處理
    startActivityForResult(intent, 1111);

刷新相冊代碼

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + mFilePath)));

以上就是Android Q之前版本通用的拍照代碼,有需要的可以直接復制就行

將圖片保存到沙盒內

  • 沙盒里面操作文件不再需要申請權限
  • 沙盒中新建文件夾只能再系統指定的子文件夾中新建

Android Q版本使用,將圖片存放到沙盒文件內,圖庫無法刷新,無法顯示

// 獲取圖片沙盒文件夾
    File PICTURES = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    //圖片名稱
    mFileName = "IMG_" + System.currentTimeMillis() + ".jpg";
    //圖片路徑
    mFilePath = PICTURES.getAbsolutePath()+"/"+mFileName;
    //跳轉到相機
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri uri;
    if (Build.VERSION.SDK_INT >= 24) {
      uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath));
    } else {
      uri = Uri.fromFile(new File(mFilePath));
    }
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, 1111);

 這個不用調用代碼刷新相冊庫,因為刷新了也不能顯示😁

仔細對比一下發現這兩種基本上沒有什么差別,只有文件存放路徑不同,因為在Android Q新版本上對存儲做出了改變。

將圖片保存到公共文件夾

  //-------------------------
    //拍照存放路徑
    //為了適配Android Q版本以下
    File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
    if (!fileDir.exists()) {
      fileDir.mkdir();
    }

    String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg";
    //--------------------------
    //--------------------------
    //設置參數
    Uri uri = null;
// 設置保存參數到ContentValues中
    ContentValues contentValues = new ContentValues();
    //設置文件名
    contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
    //兼容Android Q和以下版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
      //android Q中不再使用DATA字段,而用RELATIVE_PATH代替
      //RELATIVE_PATH是相對路徑不是絕對路徑
      //DCIM是系統文件夾,關于系統文件夾可以到系統自帶的文件管理器中查看,不可以寫沒存在的名字
      contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/Pictures");
    } else {
    //Android Q以下版本
      contentValues.put(MediaStore.Images.Media.DATA, mFilePath);
    }
    //設置文件類型
    contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/JPEG");
    //執行insert操作,向系統文件夾中添加文件
    //EXTERNAL_CONTENT_URI代表外部存儲器,該值不變
    uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
//    若生成了uri,則表示該文件添加成功
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, 1111);

使用這段代碼也不用刷新相冊庫,會自動刷新。
存到公共文件的操作,相對來說麻煩點,但是也還好。

感謝你能夠認真閱讀完這篇文章,希望小編分享如何適配AndroidQ拍照和讀取相冊圖片?內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝城县| 惠安县| 泉州市| 玉环县| 尚志市| 明水县| 龙江县| 马龙县| 宜阳县| 黑山县| 扶绥县| 凌源市| 东至县| 南丹县| 富平县| 滁州市| 温州市| 普兰县| 唐海县| 舞钢市| 五大连池市| 康平县| 勃利县| 交口县| 乐亭县| 乐山市| 卢氏县| 永泰县| 固阳县| 习水县| 潜山县| 大城县| 宜宾县| 廊坊市| 柘城县| 明星| 菏泽市| 乌兰察布市| 东港市| 四川省| 曲沃县|