国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

適配android7.0獲取文件的Uri的方法

2019-10-22 18:27:55
字體:
來源:轉載
供稿:網友

前言#

Android 7.0已經發布很久了,雖然市場份額還不是很高,但是流行起來都是早晚的事,所以適配Android 7.0刻不容緩。

Android 7.0 對系統進行了很多的優化:例如文件訪問權限,省電,網絡,后臺等等,其中最突出的就是應用外的Uri訪問。

什么時候會用到Uri的應用外訪問呢?舉一個簡單的例子,下載apk更新,這個時候會調用系統功能來安裝這個apk,這就是應用外訪問文件,需要傳入文件的Uri。

但是這樣可能會顯得不太安全,萬一是什么非常重要的文件就糟糕了,所以Android 7.0對應用外訪問的Uri要進行處理加密。

正文#

那應該怎么處理這個問題呢?首先我們需要注冊ContentProvider,這個就很熟悉了,他可以把數據庫的內容分享給其他應用,現在是為了分享文件:

//res目錄下創建xml,設置要分享的目錄,名稱定義file_paths<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"><external-path name="myFile" path ="" /></paths>// 注冊provider<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.lzp.fileprovider"android:exported="false"// 賦予Uri權限android:grantUriPermissions="true"><meta-data  android:name="android.support.FILE_PROVIDER_PATHS"  // 設置要分享的路徑  android:resource="@xml/file_paths"/></provider>

設置分享的路徑有三種:

  • <files-path/>代表的根目錄: Context.getFilesDir()
  • <external-path/>代表的根目錄:Environment.getExternalStorageDirectory()
  • <cache-path/>代表的根目錄: getCacheDir()

provider注冊完了之后,就需要稍微修改一下我們的java代碼:

Intent i = new Intent(Intent.ACTION_VIEW);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 判斷是否是7.0if(Build.VERSION.SDK_INT >= 24){  // 適配android7.0 ,不能直接訪問原路徑  // 需要對intent 授權  i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);  i.setDataAndType(FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider",new File(filePath)),"application/vnd.android.package-archive");}else{  i.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive");}context.startActivity(i);

在java代碼中,我們先判斷了當前的手機的系統版本,如果是7.0以下就使用之前的Uri,如果是7.0以上,開始通過Provider來獲取加密后的Uri。

最終得到的Uri的格式:

content://com.lzp.fileprovider/myFile/xxxxx.apk

看來主要是把分享出去的路徑進行了加密,不能直接看到文件的完整路徑。

總結#

ok,解決這個問題就是這么簡單,如果是應用內訪問文件是不受影響的,例如我們的讀取圖片之類的操作,由于時間比較緊,寫的就比較簡單了,之后再寫點稍微高逼格一點的東西。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 运城市| 郎溪县| 泰安市| 察隅县| 昭觉县| 轮台县| 高州市| 海门市| 古蔺县| 什邡市| 普定县| 喀喇| 固安县| 江西省| 玉树县| 轮台县| 西盟| 太谷县| 桐城市| 天气| 凤庆县| 五台县| 泰和县| 龙胜| 万载县| 太保市| 上犹县| 红河县| 满城县| 天津市| 乌拉特中旗| 永昌县| 农安县| 长沙市| 金华市| 石柱| 开化县| 阜南县| 桂林市| 周至县| 唐海县|