Android 7.0 DownloadManager與FileProvider的坑

本來今天高高興興屈呕,想把之前封裝好的DownloadManager拿到新項目中使用微宝,但是一個個坑的我難受想哭棺亭。

原本的流程是,通過DownloadManager下載Apk到本地蟋软,收到了下載完成廣播之后安裝镶摘。
第一坑
--

android.os.FileUriExposedException: file:///storage/emulated/0/xxx exposed beyond app through Intent.getData()

原來是我把targetSdk設(shè)置到了24,以至于在將我的文件暴露給其他應(yīng)用時岳守,拋出了這個異常凄敢,下面是使用到的代碼。

Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
install.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(install);

于是我就按這篇文章所說的湿痢,加入了FileProvider涝缝,我下載好的文件存放在Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)下,因此FileProvider的xml是這樣設(shè)置的譬重。

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- external-path 為 Environment.getExternalStorageDirectory() -->
    <!-- Download 是Environment.DIRECTORY_DOWNLOADS 的目錄名稱 -->
    <!-- downloads是uri中映射Download的名稱 -->
    <external-path path="Download" name="downloads" />
</paths>

看下面這個圖就清楚了拒逮,圖片來源,侵刪臀规。通過FileProvider.getUriForFile(context, FILE_PROVIDER_NAME, file),獲得下載在公共存儲Download目錄下的apk文件的uri滩援,然后我將這個uri傳給安裝Intent,應(yīng)該就沒問題了吧塔嬉。

FileProvider映射圖示

圖樣玩徊,第二坑

java.lang.IllegalArgumentException: Failed to find configured root that contains /sdcard/storage/emulated/0/Download/apkFile.apk

這個問答里,說是xml中的目錄寫錯了谨究,于是改來改去恩袱,不得其所。再看到這篇文章胶哲,原來是FileProvider不支持sdcard目錄下的文件共享畔塔。好吧,那我就把apk下載到我的私有目錄下,來修改DownloadManager的參數(shù)俩檬。

public Request setDestinationUri(Uri uri) {
    ...
}

public Request setDestinationInExternalFilesDir(Context context, String dirType,String subPath) {
    ...
}

public Request setDestinationInExternalPublicDir(String dirType, String subPath) {
    ...
}

對萎胰,你沒看錯,指定地址的三個方法棚辽,都是存在sd卡上的技竟。咋搞。那我就在下載好了之后屈藐,把文件拷貝到我的私有目錄下榔组,這總行了吧。

注冊一個BroadcastReceiver联逻,然后在onReceive()中搓扯,將下載好的存放在sdcard中的apk拷貝到私有目錄files文件夾內(nèi)的downloads目錄,下面是BroadcastReceiverIntentFilter和更改后的FileProvider的xml包归。

IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 注意锨推,這里改成了files-path -->
    <files-path path="downloads" name="downloads" />
</paths>

測試通過

這里還有點要注意。

Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
// 這里加上 FLAG_GRANT_READ_URI_PERMISSION 公壤,給目標程序讀改uri的權(quán)限换可。
install.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_ACTIVITY_NEW_TASK);
context.startActivity(install);

總結(jié)

FileProvider設(shè)置的本意是好的,避免直接暴露了應(yīng)用內(nèi)部的文件結(jié)構(gòu)厦幅。但是提供了external-path獲取外部存儲空間卻不奏效沾鳄,很是疑惑,不知道是不是我哪里寫錯了确憨,如果有知道的讀者還請指點译荞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市休弃,隨后出現(xiàn)的幾起案子吞歼,更是在濱河造成了極大的恐慌,老刑警劉巖玫芦,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浆熔,死亡現(xiàn)場離奇詭異,居然都是意外死亡桥帆,警方通過查閱死者的電腦和手機医增,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來老虫,“玉大人叶骨,你說我怎么就攤上這事∑沓祝” “怎么了忽刽?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵天揖,是天一觀的道長。 經(jīng)常有香客問我跪帝,道長今膊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任伞剑,我火速辦了婚禮斑唬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黎泣。我一直安慰自己恕刘,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布抒倚。 她就那樣靜靜地躺著褐着,像睡著了一般。 火紅的嫁衣襯著肌膚如雪托呕。 梳的紋絲不亂的頭發(fā)上含蓉,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音镣陕,去河邊找鬼谴餐。 笑死姻政,一個胖子當著我的面吹牛呆抑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汁展,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鹊碍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了食绿?” 一聲冷哼從身側(cè)響起侈咕,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎器紧,沒想到半個月后耀销,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡铲汪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年熊尉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掌腰。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狰住,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出齿梁,到底是詐尸還是另有隱情催植,我是刑警寧澤肮蛹,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站创南,受9級特大地震影響伦忠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稿辙,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一缓苛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邓深,春花似錦未桥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萌壳,卻和暖如春亦镶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袱瓮。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工缤骨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尺借。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓绊起,卻偏偏與公主長得像,于是被迫代替她去往敵國和親燎斩。 傳聞我的和親對象是個殘疾皇子虱歪,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容