成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么在Android7.0應(yīng)用之間對文件進(jìn)行共享-創(chuàng)新互聯(lián)

怎么在Android 7.0應(yīng)用之間對文件進(jìn)行共享?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)烏爾禾免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

從 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ì)遇到到。

關(guān)于怎么在Android 7.0應(yīng)用之間對文件進(jìn)行共享問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

本文題目:怎么在Android7.0應(yīng)用之間對文件進(jìn)行共享-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://jinyejixie.com/article32/dijgpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站排名、App設(shè)計(jì)、建站公司、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
玉门市| 甘孜县| 长泰县| 东丽区| 枞阳县| 桓台县| 巴彦淖尔市| 分宜县| 海城市| 临夏县| 新蔡县| 清苑县| 江津市| 静乐县| 简阳市| 静海县| 泗水县| 大方县| 九台市| 闸北区| 钟山县| 石屏县| 崇礼县| 陈巴尔虎旗| 浪卡子县| 郸城县| 广南县| 乌鲁木齐县| 巨野县| 册亨县| 社旗县| 高唐县| 奉新县| 通州市| 车致| 天峻县| 边坝县| 建瓯市| 大同县| 兴文县| 华安县|