在andorid 7.0之前我們只需要使用
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive")
即可安裝apk慌闭,但是在7.0以后為了提高私有文件的安全性冰蘑,面向 Android 7.0 或更高版本的應(yīng)用私有目錄被限制訪問 (0700)。
傳遞軟件包網(wǎng)域外的file://URI 可能給接收器留下無法訪問的路徑唧垦。因此,嘗試傳遞file://URI 會觸發(fā)FileUriExposedException嗅回。分享私有文件內(nèi)容的推薦方法是使用FileProvider汞贸。
1.首先就要在Manifast里面 添加一個provider
android:authorities="com.fxyx.activity.yiduan_fxyx.fileProvider" 這個屬性里面 要記得在.fileProvider之前改成自己的包名
2.然后在res目錄下創(chuàng)建一個xml的文件夾 ,在里面創(chuàng)建file_paths的資源文件(注:名字可以隨便起 但是要和provider里面的名字相同 一致)
創(chuàng)建好資源文件以后 里面添加
在這里external-pathpath=" "五督,我給的是空的 這樣安裝的時候就可以是在整個目錄下查找,如果給了固定的目錄瓶殃,那它就只會在固定的目錄下查找要安裝的文件
3.前兩步創(chuàng)建好以后 就要寫我們的方法了
首先我們要判斷是否是高版本的系統(tǒng)充包,如果還是低版本的 就依舊使用原來的方法即可安裝,如果是高版本的系統(tǒng),就要使用FileProvider.getUriForFile 這個方法來獲取臨時uri權(quán)限 賦予項目基矮,從而保證私有目錄的權(quán)限不被破壞
最后運行 就會發(fā)現(xiàn)apk已經(jīng)可以運行安裝了淆储。