怎么在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
指定文件共享路徑
在 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
最后,配置完成之后,在所有需要使用文件相關(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)
猜你還喜歡下面的內(nèi)容