Android7.0對(duì)文件的訪問(wèn)舒岸,框架使用StrictMode Api禁止我們的應(yīng)用對(duì)外部(跨越應(yīng)用分享)公開(kāi)file://,在訪問(wèn)文件時(shí)需要增加FileProvider授權(quán),這里不再贅述這個(gè)問(wèn)題崇败;
? 當(dāng)應(yīng)用中存在多個(gè)FileProvider的時(shí)候(比如在引入了一個(gè)第三方開(kāi)源,例takePhoto霹购,開(kāi)源框架為了適配android7.0文件的訪問(wèn)也使用了FileProvider)访惜,在編譯時(shí)便會(huì)報(bào)錯(cuò):
在報(bào)了錯(cuò)誤信息之后androidStudio也給出了一個(gè)解決方法,增加 tools:replace="android:authorities"屬性宙址,這么一來(lái)編譯時(shí)通過(guò)了轴脐,但是在使用takePhoto的時(shí)候卻出現(xiàn)了致命錯(cuò)誤UndeclaredThrowableException;
此時(shí)我們就會(huì)想到使用自定義的FileProvider來(lái)避免沖突抡砂,既自己寫(xiě)一個(gè)FileProvider繼承自android.support.v4.content.FileProvider大咱,然后在清單文件里完成配置;特別要注意一點(diǎn)(被這個(gè)細(xì)節(jié)小坑了一下)注益,在配置自定義的FileProvider的時(shí)候碴巾,resource指向的xml一定要保證唯一,比如takePhoto使用了最原始的命名file_paths.xml丑搔,那么自定義的FileProvider需要用另一個(gè)xml配置(比如file_paths1.xml)厦瓢,避免takePhoto使用的異常(壓縮圖片失敗等問(wèn)題), 我自己花了較多的時(shí)間解決了這個(gè)Bug啤月,希望能幫助后來(lái)人旷痕。