? ? 最近收到用戶反饋:app分享文件到微信會(huì)提示:獲取資源失敗问麸,分享到QQ提示:文件不存在棋电。造成這個(gè)問(wèn)題主要有兩個(gè)原因:
? ? 1、file:// 協(xié)議不再支持共享瞧掺,需要用content:// 協(xié)議奋献。簡(jiǎn)單的說(shuō)就是文件Uri不能直接通過(guò)Uri.fromFile(file)獲取健霹,而應(yīng)該通過(guò)FileProvider.getUriForFile(context, packageName+".fileprovider", file)獲取。關(guān)于如何配置FileProvider網(wǎng)上已經(jīng)一堆文章了瓶蚂,我這邊就不再贅述糖埋。
? ? 2、由于FileProvider的文件是私有域的窃这,因此其他app想要訪問(wèn)該域的話需要我們的App進(jìn)行授權(quán)
主要是兩句代碼
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.grantUriPermission(packageName, uri,? Intent.FLAG_GRANT_READ_URI_PERMISSION);
3阶捆、如果你使用的Api版本為30即Android11,那么在調(diào)用queryIntentActivities獲取相關(guān)應(yīng)用的包名時(shí)并沒(méi)有返回相關(guān)的包名钦听,別急,這是因?yàn)閍ndroid11又引入了一個(gè)包名可見(jiàn)性的概念倍奢,詳情可以參考一下文章:Android11適配 - 軟件包可見(jiàn)性
4朴上、碼云Demo