欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 7.0應(yīng)用之間如何共享文件

 更新時(shí)間:2020年12月23日 14:54:12   作者:躬行之  
這篇文章主要介紹了Android 7.0應(yīng)用之間如何共享文件,幫助大家更好的理解和使用Android進(jìn)行開發(fā),感興趣的朋友可以了解下

開發(fā)中經(jīng)常需要將某個(gè)文件向另一個(gè)應(yīng)用程序傳遞,如圖片上傳到另一個(gè)應(yīng)用程序、文件在不同存儲(chǔ)路徑之間的復(fù)制粘貼等都需要共享文件,可以這樣理解接收文件的應(yīng)用是在向提供文件的應(yīng)用發(fā)送請(qǐng)求。

從 Android 7.0 開始,Android 執(zhí)行 StrictMode 策略,禁止在應(yīng)用外部公開 file://URL,如果在 Android 7.0 以上的應(yīng)用不使用 FileProvider ,則會(huì)拋出 FileUriExposedException 異常,Android 7.0 以后要在應(yīng)用之間共享文件要使用 content://URL 授予 URL 臨時(shí)訪問權(quán)限,即要使用 FileProvider 的方式來授予臨時(shí)訪問權(quán)限,具有臨時(shí)訪問權(quán)限的 URL 是安全的,這種臨時(shí)的 URL 會(huì)自動(dòng)過期,其中 FileProvider 提供的 getUriForFile() 用于生成文件的內(nèi)容。

在所有情況下,從您的應(yīng)用程序向另一個(gè)應(yīng)用程序提供文件的唯一安全方法是向接收應(yīng)用程序發(fā)送文件的內(nèi)容URI,并授予該URI的臨時(shí)訪問權(quán)限。具有臨時(shí)URI訪問權(quán)限的內(nèi)容URI是安全的,因?yàn)樗鼈儍H適用于接收URI的應(yīng)用程序,并且它們會(huì)自動(dòng)過期。 Android FileProvider組件提供getUriForFile()方法,用于生成文件的內(nèi)容URI。

這里也會(huì)提到一個(gè)在 Android 7.0 及更高版本時(shí)經(jīng)常出現(xiàn)的異常:FileUriExposedException,通過使用 FileProvider 就可以解決該異常,當(dāng)然這也是 Android 系統(tǒng)在安全性上不斷完善的結(jié)果。

  • 指定FileProvider
  • 指定文件共享路徑

指定FileProvider

在 AndroidManifest 文件中指定 Provider,參考如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.myapp">
 <application
  ...>
  
  <!--android:authorities="${applicationId}.yourname"-->
  <provider
   android:name="android.support.v4.content.FileProvider"
   <!--authorities屬性指定要用于FileProvider生成的內(nèi)容URI的URI權(quán)限,一般是applicationId.yourname"組成-->
   android:authorities="com.example.myapp.fileprovider"
   android:grantUriPermissions="true"
   android:exported="false">
   <meta-data
    android:name="android.support.FILE_PROVIDER_PATHS"
    android:resource="@xml/filepaths" />
  </provider>
  ...
 </application>
</manifest>

指定文件共享路徑

上面代碼中在 meta-data 目錄中指定了要共享的文件目錄,文件目錄在 filepathd.xml 中定義,可在相應(yīng)的 xml 中定義的路徑有以下幾種,具體參考如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
 <paths>

  <!--表示設(shè)備的根目錄(new File("/"))-->
  <root-path name="root" path="" />
  <!--表示context.getFileDir()-->
  <files-path name="files" path="" />
  <!--表示context.getCacheDir()-->
  <cache-path name="cache" path="" />
  <!--表示Environment.getExternalStorageDirectory()-->
  <external-path name="external" path="" />
  <!--表示context.getExternalFilesDirs()-->
  <external-files-path name="name" path="path" />
  <!--表示getExternalCacheDirs()-->
  <external-cache-path name="name" path="path" />

 </paths>
</resources>

在 xml 中表示某個(gè)路徑需要兩個(gè)屬性,path 表示當(dāng)前指定目錄的子目錄,如果不指定則表示的是當(dāng)前指定目錄下的根目錄及子目錄,name 表示會(huì)將 name 添加的 URL 后面作為該文件的訪問路徑,參考如下:

//表示當(dāng)前要共享的文件會(huì)在 context.getFileDir() 目錄下的 images 子目錄下查找要共享的文件
<paths>
 <files-path path="images/" name="myImage" />
</paths>

//表示最終生成的共享的文件URL
content://com.example.myapp.fileprovider/myImage/image.jpg

獲取Uri

最后,配置完成之后,在所有需要使用文件相關(guān)的,在獲取 Url 時(shí)應(yīng)該按照如下方式獲取,具體如下:

public Uri getUri(File file) {
 Uri uri = null;
 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".youName", file);
 } else {
  uri = Uri.fromFile(file);
 }
 return uri;
}

這樣就可以在 Android 7.0 以上愉快的共享文件了,這個(gè)知識(shí)點(diǎn)也算是開發(fā)中經(jīng)常會(huì)遇到到。

以上就是Android 7.0應(yīng)用之間如何共享文件的詳細(xì)內(nèi)容,更多關(guān)于Android 7.0 共享文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論