Android Q(10) 拍照問題

Android Q官方文檔

AndroidQ新增的分區存儲

  1. Android Q文件存儲機制修改成了沙盒模式,和IOS神似
  2. 應用只能訪問自己沙盒下的文件和公共媒體文件
  3. 對於Android Q以下,還是使用老的文件存儲方式

權限變更

Android Q 更改了應用對設備外部存儲設備中的文件(如:/sdcard )的訪問方式。繼續使用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 權限,只不過當擁有這些權限的時候,你只能訪問媒體文件,無法訪問其他文件。

所以在適配Android Q 拍照問題必須使用沙盒模式來存儲拍照文件:

    /**
     * 跳轉到照相機
     */
    private void gotoCamera() {
        Log.d("evan", "*****************打開相機********************");

        //	獲取圖片沙盒文件夾
        File dPictures = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        //圖片名稱
        String   mFileName = "IMG_" + System.currentTimeMillis() + ".jpg";
        //圖片路徑
        String  mFilePath = dPictures.getAbsolutePath()+"/"+mFileName;
        //創建拍照存儲的圖片文件
//        tempFile = new File(FileUtil.checkDirPath(Environment.getExternalStorageDirectory().getPath() + "/image/"), System.currentTimeMillis() + ".jpg");
        tempFile = new File(mFilePath);
        //跳轉到調用系統相機
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //設置7.0中共享文件,分享路徑定義在xml/file_paths.xml
            intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", tempFile);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
        } else {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
        }
        startActivityForResult(intent, REQUEST_CAPTURE);
    }

最後再發一個一行代碼解決的方法:
在AndroidManifest.xml的application中添加一行:

    <application
    ……
	 android:requestLegacyExternalStorage="true
       ……>

這樣可以暫時關閉分區存儲功能,但是在以後的版本中將會被廢棄,如果有時間還是儘早做適配。

發佈了141 篇原創文章 · 獲贊 34 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章