初識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的問題,去除就好了。