Android 7.0 適配 android.os.FileUriExposedException: file://***** exposed beyond app through Intent.getData() 的解決方法

如果你的安卓程序的targetSdkVersion是24以上,也就是7.0。你需要使用FileProvider向其他應(yīng)用提供文件,而不是隨便地利用文件地址就可以。也就是說你需要使用 content:// 來代替file://。接下來提供步驟:

  • 你最好提供自己的FileProvider擴展,而不是直接使用android.support.v4.content.FileProvider,以防止與其他app和庫沖突。
public class MyFileProvider extends FileProvider {
}
  • 接下來,在AndroidManifest.xml中,添加一個provider標(biāo)簽
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <application
        ...
        <provider
            android:name=".MyFileProvider"
            android:authorities="${applicationId}.my.package.name.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
    </application>
</manifest>
  • 你應(yīng)該注意到,其中有一個xml資源,沒錯,你需要定義一個xml文件來說明你需要提供的文件路徑
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

在這個例子中,我們指出需要獲取外部儲存的根路徑,用.表示。

  • 最后,你就可以獲取文件Uri了,注意,你需要FLAG_GRANT_READ_URI_PERMISSION權(quán)限來完成這個工作。比如在intent中,獲取uri地址來安裝apk:
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileProvider", apkfile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
startActivity(intent);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上周,寫了個小demo,正好同事使用的小米手機系統(tǒng)內(nèi)核更新到7.0,遂拿來測試了一番。其中遇到的小問題,現(xiàn)在來跟大...
    monkey_who閱讀 4,891評論 0 13
  • 由于 Android 7.0 或更高版本的系統(tǒng)在國內(nèi)手機市場上的占比不是很高,很多 Android 開發(fā)人員并沒有...
    亦楓閱讀 4,426評論 1 39
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 時間就是窗外山坡上的那只羊。它低頭吃草,時間就開始流動;它抬頭看天,時間于是靜止。 但那是在紅城大禮堂之外。在紅城...
    南呂先生閱讀 344評論 3 9
  • 人生如初見 故事的主人公是一位初 姓的女子!大齡女青年 ,實屬,因為年芳三字當(dāng)頭 !在2016年11月11日的第二...
    小凡平凡的凡閱讀 282評論 0 1

友情鏈接更多精彩內(nèi)容