android7.0以上安裝apk

很多開發(fā)者應(yīng)該都知道android7.0以上安裝apk的問題亚皂。但是看了一些文章束昵,并沒有很好的幫助我解決問題度气。而且還有的坑沒有被提到仿荆。

android7.0安裝apk會(huì)出現(xiàn)的問題和原因

google在android7.0以上,禁止直接通過file://形式的uri向另一個(gè)應(yīng)用傳遞文件uri鲤桥。所以導(dǎo)致安裝apk和相機(jī)拍照保存數(shù)據(jù)都會(huì)出現(xiàn)問題揍拆。google提供了FileProvider類來獲取文件uri。FileProvider的本質(zhì)也就是ContentProvider茶凳。

簡(jiǎn)單回顧下ContentProvider

ContentProvider做為android的四大組件之一嫂拴,它主要的作用就是夸進(jìn)程通信。從一個(gè)進(jìn)程讀取數(shù)據(jù)并提供給另一個(gè)進(jìn)程贮喧。ContentProvider的底層是Binder機(jī)制(和AIDL一樣)筒狠。
ContentProvider核心由三個(gè)部分組成

  1. uri: 統(tǒng)一資源標(biāo)識(shí)符 格式 content://com.aaa.bbb/user/1 。即:協(xié)議://授權(quán)(authority)/路徑/id箱沦。表明了訪問哪個(gè)進(jìn)程(com.aaa.bbb)的哪個(gè)文件(user)辩恼。相關(guān)的類有URIMather(根據(jù)uri匹配)和ContentUri(在uri后面添加和獲取id)。
  2. ContentResolver:用來幫助執(zhí)行ContentProvider中的增刪改查谓形,簡(jiǎn)化操作灶伊。
  3. ContentOberser:監(jiān)聽某個(gè)uri下面數(shù)據(jù)變化,使用觀察者模式寒跳。

創(chuàng)建一個(gè)ContentProvider步驟就是 清單文件注冊(cè)provider - 創(chuàng)建provider類聘萨,重寫增刪改查方法。訪問ContentProvider步驟就是 創(chuàng)建uri contentProvider ContentResolver - 調(diào)用api訪問童太。

為啥要回顧呢米辐?因?yàn)镕ileProvider就是ContentProvider。那么使用FileProvider好處是什么书释?當(dāng)然是增加開發(fā)者工作量翘贮,減少花錢時(shí)間。爆惧。 狸页。 好處大概是: 禁止過去的file://的方式向外部公開訪問(我猜測(cè)是setUri(file://xxx)這個(gè)xxx文件就會(huì)被賦予外部應(yīng)用的訪問權(quán)限。不然為啥要換FileProvider)检激,而通過FileProvider的方式給與臨時(shí)權(quán)限肴捉。官方解釋:

對(duì)于面向 Android 7.0 的應(yīng)用,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開 file:// URI叔收。如果一項(xiàng)包含文件 URI 的 intent 離開您的應(yīng)用,則應(yīng)用出現(xiàn)故障傲隶,并出現(xiàn) FileUriExposedException 異常饺律。

要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項(xiàng) content:// URI跺株,并授予 URI 臨時(shí)訪問權(quán)限复濒。進(jìn)行此授權(quán)的最簡(jiǎn)單方式是使用 FileProvider 類脖卖。如需了解有關(guān)權(quán)限和共享文件的詳細(xì)信息,請(qǐng)參閱共享文件巧颈。
https://developer.android.com/about/versions/nougat/android-7.0-changes.html#accessibility

FileProvider如何使用

這是固定步驟畦木,不多贅述了。給個(gè)鴻洋的文章參考下:
https://blog.csdn.net/lmj623565791/article/details/72859156
但是我照著一模一樣的做了砸泛,剛打開安裝頁面就閃掉十籍。弄了大半天才發(fā)現(xiàn)問題。我使用的targetSdk為28唇礁,改成25就好了勾栗。為什么呢?原因是android8.0(ApiLevel26)以上需要添加權(quán)限盏筐,非正規(guī)來源apk的必須用戶手動(dòng)允許安裝围俘,才能進(jìn)行下面的安裝頁面操作。

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
/** 
 * 判斷是否是8.0系統(tǒng),是的話需要獲取此權(quán)限琢融,判斷開沒開界牡,沒開的話處理未知應(yīng)用來源權(quán)限問題,否則直接安裝 
 */  
private void checkIsAndroidO() {  
    if (Build.VERSION.SDK_INT >= 26) {  
        boolean b = getPackageManager().canRequestPackageInstalls();  
        if (b) {  
            publicApk();//安裝應(yīng)用的邏輯(寫自己的就可以)  
        } else {  
            //請(qǐng)求安裝未知應(yīng)用來源的權(quán)限  
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);  
        }  
    } else {  
        installApk();  
    }  

可以看看這篇文章
https://blog.csdn.net/kac930/article/details/79131671

到這里就結(jié)束了。這個(gè)權(quán)限的原因讓我找了大半天才找到漾抬。之前把時(shí)間都耗在查看代碼上宿亡,怎么都看不出來問題,同樣的代碼運(yùn)行demo就沒問題奋蔚,在我的app就有問題(target 28)她混。所以下次遇到問題要換個(gè)思路、方向不能死腦筋了泊碑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坤按,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子馒过,更是在濱河造成了極大的恐慌臭脓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腹忽,死亡現(xiàn)場(chǎng)離奇詭異来累,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窘奏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門嘹锁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人着裹,你說我怎么就攤上這事领猾。” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵摔竿,是天一觀的道長(zhǎng)面粮。 經(jīng)常有香客問我,道長(zhǎng)继低,這世上最難降的妖魔是什么熬苍? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮袁翁,結(jié)果婚禮上柴底,老公的妹妹穿的比我還像新娘。我一直安慰自己梦裂,他們只是感情好似枕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著年柠,像睡著了一般凿歼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冗恨,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天答憔,我揣著相機(jī)與錄音,去河邊找鬼掀抹。 笑死虐拓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的傲武。 我是一名探鬼主播蓉驹,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼揪利!你這毒婦竟也來了态兴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤疟位,失蹤者是張志新(化名)和其女友劉穎瞻润,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甜刻,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绍撞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了得院。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻铣。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祥绞,靈堂內(nèi)的尸體忽然破棺而出矾柜,到底是詐尸還是另有隱情阱驾,我是刑警寧澤就谜,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布怪蔑,位于F島的核電站,受9級(jí)特大地震影響丧荐,放射性物質(zhì)發(fā)生泄漏缆瓣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一虹统、第九天 我趴在偏房一處隱蔽的房頂上張望弓坞。 院中可真熱鬧,春花似錦车荔、人聲如沸渡冻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽族吻。三九已至,卻和暖如春珠增,著一層夾襖步出監(jiān)牢的瞬間超歌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工蒂教, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巍举,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓凝垛,卻偏偏與公主長(zhǎng)得像懊悯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梦皮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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