適配Android N相機拍照的填坑小紀

初識FileProvider在Android N上的應用

? ? ? 早些時候瀏覽一些文章時,了解到Android從N開始不允許以file://的方式通過Intent在兩個APP之間分享文件,而是通過FileProvider生成content://Uri。這就意味著如果在Android N以上的版本繼續使用file://的方式分享文件,則系統會拋出異常。就個人而言,file://這種方式使用最多的就是調用系統相機拍攝照片的時候了,立馬找到一部Android N以上的手機,果然以前的demo無法完成拍照。于是乎,搗鼓起來,解決掉這個問題。

跳坑過程不多說,直接上可行方案

1、定義一個FileProvider,并指定有效的文件

? ? ? ?在AndroidManifest.xml文件中配置<provider>元素并提供相應的屬性

定義一個FileProvider

? ? ? ?在/res/xml下新建provider_paths.xml文件

為FileProvider指定有效的文件

2、修改拍照部分的代碼

兼容Android N的拍照方案

回首折磨過自己的大坑們

1、provider_paths.xml文件中未配置root-path

? ? ? provider_paths.xml文件中未配置root-path,老是導致拍照功能在android N上無法實現,折騰了半天百思不得解,通過看日志這個小舉措才發現應該配置root-path,否則拋出異常。

2、Intent.FLAG_ACTIVITY_NEW_TASK導致result_code始終為0

? ? 調用系統相機前設置了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),導致在activity里的onActivityResult()方法中的result_code始終為0,以致于拍攝的照片無法顯示、處理。起初老是尋找result_code=0點多種原因,無果后還曾以為個別手機的問題,就當快無招的時候發現是Intent.FLAG_ACTIVITY_NEW_TASK的問題,去除就好了。

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

推薦閱讀更多精彩內容