Android最佳實踐之設(shè)置文件分享

原文鏈接:Setting Up File Sharing

本課程教你:

為了安全在應(yīng)用之間分享文件约巷,你需要設(shè)置你的應(yīng)用提供一種處理文件的安全機(jī)制,該機(jī)制采用content URI的形式俊犯。Android FileProvider 組件基于你在XML中提供的內(nèi)容來產(chǎn)生文件的content URIs镀赌。本課程教你怎樣在你的應(yīng)用中添加一個默認(rèn)的 FileProvider,怎樣指定你想提供給其他應(yīng)用的文件。

注意:FileProvider 類是 v4 Support Library 的一部分另伍。關(guān)于這個庫的更多信息,請參考 Support Library Setup.

指定FileProvider

為了你的應(yīng)用定義一個 FileProvider 绞旅,你需要在manifest文件中設(shè)置一個入口摆尝。這個入口指定了使用content URIs需要的權(quán)限以及包含能夠分享的文件目錄的XML文件名稱。

下面這段代碼教你如何在manifest 文件中添加 <provider> 元素來指定一個 FileProvider 類因悲,相關(guān)的權(quán)限以及XML文件名稱:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
         ...>
         <provider
              android:name="android.support.v4.content.FileProvider"
              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>

在這個例子中堕汞, android:authorities
屬性定義了由 FileProvider 產(chǎn)生的content URIs使用時需要的授權(quán)。這本例子中晃琳,這個權(quán)限是com.example.myapp.fileprovider讯检。對于你自己的應(yīng)用,指定一個由應(yīng)用的 android:package 值加上"fileprovider"字符串作為授權(quán)卫旱。關(guān)于授權(quán)的更多內(nèi)容人灼,請參考 Content URIsandroid:authorities 相關(guān)的文檔。

<provider> 的子元素 <meta-data> 指向一個XML文件顾翼,該文件包含你希望分享的文件目錄投放。android:resource屬性是文件的路徑和名字,不需要加上.xml的擴(kuò)展名暴构。文件的內(nèi)容將在寫一部分介紹跪呈。

指定可分享的目錄

一旦你在應(yīng)用的manifest文件中添加了 FileProvider段磨,你需要指定包含你希望分享的文件的路徑。為了指定這個路徑耗绿,在你的工程res/xml/子目錄下創(chuàng)建filepaths.xml文件苹支。在這個文件里面為每一個路徑添加一個XML元素。下面這段代碼顯示了一個res/xml/filepaths.xml具體內(nèi)容的例子误阻。這段代碼也顯示了如何在內(nèi)部存儲器的files/目錄下分享一個子目錄的路徑债蜜。

<paths>
    <files-path path="images/" name="myimages" />
</paths>

在這個例子中,<files-path>標(biāo)簽分享了在你的應(yīng)用的內(nèi)部存儲器中的files/路徑究反。path屬性分享了files/下面的images/子目錄寻定。name屬性告訴 FileProvider 對于files/images/子目錄在content URIs中添加一個myimages路徑段。

<paths>元素可以有多個子元素精耐,每個子元素指定一個不同的分享路徑狼速。除了<files-path>元素之外,你也可以使用<external-path>來分享外部存儲器的路徑卦停,使用<cache-path>來分享內(nèi)部緩存路徑向胡。關(guān)于指定分享路徑的子元素的更多信息,參見 FileProvider 相關(guān)文檔惊完。

注意:這個XML文件是唯一能指定分享路徑的方法僵芹,你不能在程序中動態(tài)的添加一個路徑。

現(xiàn)在小槐,對于你的應(yīng)用內(nèi)部存儲器的files路徑以及files子路徑下的文件拇派,你已經(jīng)完成了使用 FileProvider 為它們生成對應(yīng)的content URIs。當(dāng)你的應(yīng)用為文件生成一個content URI時凿跳,它包含指定在 <provider> 元素中的授權(quán)件豌、myimages/路徑以及該文件的名字。

例如拄显,如果你根據(jù)本課程的代碼定義一個 FileProvider苟径,如果你請求default_image.jpg的content URI,FileProvider 會返回下面的URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躬审,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蟆盐,更是在濱河造成了極大的恐慌承边,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件石挂,死亡現(xiàn)場離奇詭異博助,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痹愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門富岳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛔糯,“玉大人,你說我怎么就攤上這事窖式∫响” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵萝喘,是天一觀的道長淮逻。 經(jīng)常有香客問我,道長阁簸,這世上最難降的妖魔是什么爬早? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮启妹,結(jié)果婚禮上筛严,老公的妹妹穿的比我還像新娘。我一直安慰自己饶米,他們只是感情好桨啃,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咙崎,像睡著了一般优幸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褪猛,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天网杆,我揣著相機(jī)與錄音,去河邊找鬼伊滋。 笑死碳却,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笑旺。 我是一名探鬼主播昼浦,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筒主!你這毒婦竟也來了关噪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤乌妙,失蹤者是張志新(化名)和其女友劉穎使兔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藤韵,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虐沥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲险。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡镐依,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出天试,到底是詐尸還是另有隱情槐壳,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布秋秤,位于F島的核電站宏粤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灼卢。R本人自食惡果不足惜绍哎,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞋真。 院中可真熱鬧崇堰,春花似錦、人聲如沸涩咖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檩互。三九已至特幔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闸昨,已是汗流浹背蚯斯。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留饵较,地道東北人拍嵌。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像循诉,于是被迫代替她去往敵國和親横辆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理茄猫,服務(wù)發(fā)現(xiàn)狈蚤,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 原文鏈接:FileProvider 類概述 FileProvider是 ContentProvider 的一個特殊...
    RommiPlus閱讀 1,249評論 0 0
  • 原文鏈接:Sharing a File 本課程教你: 接收文件請求 創(chuàng)建選取文件的Activity 響應(yīng)文件選取 ...
    RommiPlus閱讀 1,228評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評論 25 707
  • 上周划纽,寫了個小demo炫惩,正好同事使用的小米手機(jī)系統(tǒng)內(nèi)核更新到7.0,遂拿來測試了一番阿浓。其中遇到的小問題,現(xiàn)在來跟大...
    monkey_who閱讀 4,619評論 0 13