在android7.0上爹袁,我們需要在應(yīng)用內(nèi)實現(xiàn)更新apk并且安裝包的時候,無法再像之前那樣了。隨著Android版本越來越高显拳,Android對隱私的保護力度也越來越大。比如:Android6.0引入的動態(tài)權(quán)限控制(Runtime Permissions)搓萧,Android7.0又引入“私有目錄被限制訪問”杂数,“StrictMode API 政策”
“私有目錄被限制訪問“ 是指在Android7.0中為了提高私有文件的安全性,面向 Android N 或更高版本的應(yīng)用私有目錄將被限制訪問瘸洛。
" StrictMode API 政策" 是指禁止向你的應(yīng)用外公開 file:// URI揍移。 如果一項包含文件 file:// URI類型 的 Intent 離開你的應(yīng)用,應(yīng)用失敗反肋,并出現(xiàn) FileUriExposedException 異常那伐。
7.0安裝apk
1.在AndroidManifest中注冊FileProvide
2.在xml文件夾中創(chuàng)建file_paths文件,來聲明可以訪問的路徑
FileProvider所支持的幾種path類型
<files-path name="name" path="path">
該方式提供在應(yīng)用的內(nèi)部存儲區(qū)的文件/子目錄的文件。它對應(yīng)Context.getFilesDir返回的路徑:eg:"/data/data/包名/files"抓督。
<cache-pathname="name" path="path">
該方式提供在應(yīng)用的內(nèi)部存儲區(qū)的緩存子目錄的文件燃少。它對應(yīng)getCacheDir返回的路徑:eg:“/data/data/包名/cache”;
<external-path name="name" path="path">
該方式提供在外部存儲區(qū)域根目錄下的文件铃在。它對應(yīng)Environment.getExternalStorageDirectory返回的路徑:eg:"/storage/emulated/0";
<external-files-path name="name" path="path">
該方式提供在應(yīng)用的外部存儲區(qū)根目錄的下的文件阵具。它對應(yīng)Context.getExternalFilesDir(String) ?Context.getExternalFilesDir(null)返回的路徑。eg:"/storage/emulated/0/Android/data/包名/files"定铜。
<external-cache-path name="name" path="path" >
該方式提供在應(yīng)用的外部緩存區(qū)根目錄的文件阳液。它對應(yīng)Context.getExternalCacheDir()返回的路徑。eg:"/storage/emulated/0/Android/data/包名/cache"揣炕。
這些類型在Android手機內(nèi)部存儲區(qū)文件共享是可以的帘皿,但對于外置SD卡是不行的,如果你想通過FileProvider.getUriForFile()獲取一個外置SD卡的Uri則會報出?
java.lang.IllegalArgumentException- Failed to find configured root that contains
解決辦法是在file_paths文件中添加<root_path />節(jié)點
最后畸陡,安裝apk的方法
官方文檔地址:
https://developer.android.google.cn/reference/android/support/v4/content/FileProvider