Android調用相機相冊適配

最近項目中用到調用相機相冊并裁剪的功能點,之前的代碼在系統6.0和7.0上出現了問題,全是權限的坑,現在將適配好的代碼粘貼出來,作為備忘吧。

在系統6.0以后需要添加運行時權限相關代碼 比如在出現選擇相機還是相冊的dialog之前申請權限:

//6.0以上系統申請定位權限


申請權限的回調為:


在manifest中添加:

<provider

android:name="android.support.v4.content.FileProvider"

android:authorities="包名.provider"

android:exported="false"

android:grantUriPermissions="true">

<meta-data

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/provider_paths"/>

</provider>

在res下創建目錄,增加provider_paths.xml

provider_paths.xml文件的內容為:


當通過彈出的dialog選擇相機時調用selectFromCamera方法:


其中getUriForFile(context,file)方法為:


當選擇相冊的時候調用:


當調用裁剪時:

Uri mCropUri;

public void startPhotoZoom(Uri uri, int targetW, int targetH) {

Intent intent = new Intent("com.android.camera.action.CROP");

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {

? ? ? ? String url = FileUtils.getPath(QuickApplication.getInstance(), uri);

? ? ? ? intent.setDataAndType(getUriForFile(mAct,new File(url)), "image/*");

} else {

? ? ? ? intent.setDataAndType(uri, "image/*");

}

// crop為true是設置在開啟的intent中設置顯示的view可以剪裁

intent.putExtra("crop", "true");

// aspectX aspectY 是寬高的比例

intent.putExtra("aspectX", targetW);

intent.putExtra("aspectY", targetH);

// outputX,outputY 是剪裁圖片的寬高

intent.putExtra("outputX", targetW);

intent.putExtra("outputY", targetH);

intent.putExtra("scale", true);

intent.putExtra("return-data", false);

intent.putExtra("noFaceDetection", true);

getCutUri();

intent.putExtra(MediaStore.EXTRA_OUTPUT, mCropUri);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

? ? intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION

? ? |Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

}

? ?mAct.startActivityForResult(intent, Constants.REQUEST_CODE_CREATE_FROM_CROP);

}

private void getCutUri() {

? ?File file =newFile(SdcardUtil.getPhotoCacheDir(), FileUtils.getPhotoFileName());

? ? mCropUri= Uri.fromFile(file);

}


最后的mCropUri為裁剪之后的圖片uri,整體過程就是這樣的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 只簡述我發現問題的根源,有些是適配了7.0,會報權限失敗問題,那是由于沒有動態授權導致,接下來我一步一步給大家實現...
    Wocus閱讀 2,395評論 4 5
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,523評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,296評論 25 708
  • Android7.0發布已經有一個多月了,Android7.0在給用戶帶來一些新的特性的同時,也給開發者帶來了新的...
    東經315度閱讀 1,381評論 0 14
  • 刷了第七季第6集后,HBO在我心中的地位那是蹭蹭蹭往上漲啊。太牛掰了,能制作出這樣蕩氣回腸的史詩般壯麗的影片。不敢...
    最愛山抹微云閱讀 734評論 0 1