0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android(Q)10 上的分區(qū)外部存儲(chǔ)訪問

jf_78858299 ? 來源:GSYTech ? 作者:戀貓de小郭 ? 2023-05-26 11:00 ? 次閱讀

Android(API 29)10 發(fā)布至今已經(jīng)有不少設(shè)備完成升級(jí),如:***小米9、Redmi K20pro、華為 P30pro/Mate30pro 、榮耀 v30/v20、Oppo Reno、ONnePlus 7T、谷歌 Pixel ***等都已經(jīng)升級(jí)到 Android 10 的支持,不少應(yīng)用市場(chǎng)也要求應(yīng)用需要針對(duì) Android 10 進(jìn)行適配,其中最大的變更之一就是 scoped storage。

在針對(duì)目前 小米、華為、Pixel 的幾臺(tái) Android 10 手機(jī)做了測(cè)試,在不設(shè)置 requestLegacyExternalStorage 的前提下得到結(jié)論(官方還沒完全開啟限制的前提):

  • 1、targetSDK 用 28 編譯的在 Android 10 上還是可以讀取到全部文件, 之后覆蓋安裝一個(gè)使用 targetSDK 29 的,還能繼續(xù)可以訪問全路徑。
  • 2、卸載后直接用 targetSDK 29 編譯的會(huì)讀取不到。

圖片

而官方明確表示:

明年(2020),主要平臺(tái)版本將要求所有應(yīng)用都使用分區(qū)存儲(chǔ),無論應(yīng)用的目標(biāo) SDK 級(jí)別是多少。因此,您應(yīng)該提前確保您的應(yīng)用能夠使用分區(qū)存儲(chǔ)。為此,請(qǐng)確保針對(duì)搭載 Android 10(API 級(jí)別 29)及更高版本的設(shè)備啟用了該行為。

所以不管是使用 requestLegacyExternalStorage 還是降低 targetSDK 都無法在接下來2020 年的 Android(API 29)10 新版更新中被豁免。

雖然作為 Android 開發(fā)會(huì)因?yàn)闊o法對(duì)用戶存儲(chǔ)目錄“為所欲為”而頭痛,但是作為用戶卻是感覺欣喜的。

因?yàn)殚L(zhǎng)期以來 Android 用戶的本地存儲(chǔ)目錄都十分雜亂,開發(fā)者只要申請(qǐng)一次權(quán)限就可以“為所欲為”地創(chuàng)建和讀取本地存儲(chǔ),雖然谷歌在 Android 4.4(API 19))引入了存 SAF(Storage Access Framework) , 但是開發(fā)者大部分時(shí)候都選擇無視。

我甚至想要一個(gè)系統(tǒng)標(biāo)志出這個(gè)文件是誰創(chuàng)建的 API ,因?yàn)樽罱龅竭@個(gè)問題卻沒有頭緒: 為什么相冊(cè)里總是多出一張空白圖片,刪了后不久又重現(xiàn)?

官方解讀

為了讓用戶更好地管理自己的文件并減少混亂,Android 10(API 29)開始應(yīng)用在默認(rèn)情況下會(huì)被要求使用 scoped storage(即分區(qū)存儲(chǔ)),也就是說應(yīng)用只能看到自己專有的目錄(Context.getExternalFilesDir())以及特定類型的媒體文件。

注意這個(gè)是強(qiáng)制性的,但是會(huì)有緩沖期,官方明確額表示,除非你的應(yīng)用真的有強(qiáng)烈需要訪問專有目錄以及 MediaStore 之外的文件,否則最好使用分區(qū)存儲(chǔ)。

使用分區(qū)存儲(chǔ)的應(yīng)用對(duì)自己創(chuàng)建的文件始終擁有讀/寫權(quán)限,無論文件是否位于應(yīng)用的專有目錄內(nèi) 。這說明了默認(rèn)分區(qū)存儲(chǔ)內(nèi)的文件也只有應(yīng)用自己能看到,就像是沙盒內(nèi),同時(shí) getExternalFilesDir()下的文件會(huì)隨著應(yīng)用卸載而清除。

也就是說應(yīng)用可以無需申請(qǐng)任何權(quán)限使用 getExternalFilesDir() 、 MediaStoreSAF 讀寫文件, 當(dāng)然如果使用 MediaStore 讀取其他應(yīng)用的媒體集合時(shí),是需要 READ_EXTERNAL_STORAGE

MediaStore 中支持的類型有:

  • 照片:存儲(chǔ)在 MediaStore.Images 中。
  • 視頻:存儲(chǔ)在 MediaStore.Video 中。
  • 音頻文件:存儲(chǔ)在 MediaStore.Audio 中。

另外還有其他的限制,比如:

  • 應(yīng)用沒有 ACCESS_MEDIA_LOCATION 權(quán)限,那么訪問到的媒體資源中的 Exif 元數(shù)據(jù)會(huì)被修改.
  • 使用 MediaStore.Files 也僅顯示照片、視頻和音頻文件,例如不會(huì)顯示表中的 PDF 文件。

總結(jié)起來結(jié)論就是:

  • 1、獲取系統(tǒng)相冊(cè)、視頻,圖片等需要通過 SAF ,利用 ContentResolverCursor 來提供。
  • 2、訪問公有目錄也需要通過 MediaStoreContentResolver ,比如保存圖片到外部公共存儲(chǔ),拷貝文件到 Download 目錄等等。
  • 3、比如 new File(path).createNewFile(); 等的判斷在公共目錄下不能再用了。

簡(jiǎn)單來說就是:應(yīng)用在自己的沙盒內(nèi)可以“為所欲為”,通過 MediaStore 可以分類整理文件,通過 SAF 可以訪問其他應(yīng)用的公共媒體文件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3903

    瀏覽量

    126612
  • 華為
    +關(guān)注

    關(guān)注

    215

    文章

    34128

    瀏覽量

    249453
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61489
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在Ubuntu Linux釋放/boot分區(qū)中的空間

    在Ubuntu Linux,/boot分區(qū)是用于存儲(chǔ)啟動(dòng)相關(guān)的文件的。隨著時(shí)間的推移,這個(gè)分區(qū)可能會(huì)變滿,導(dǎo)致系統(tǒng)無法安裝新的內(nèi)核和更新。本文將介紹如何釋放/boot
    的頭像 發(fā)表于 11-28 10:04 ?676次閱讀

    Android中數(shù)據(jù)存儲(chǔ)的介紹和使用

    APP 在外部存儲(chǔ)的目錄,其目錄為 Android/data//。在訪問該目錄時(shí), app 不需要申請(qǐng)讀寫
    發(fā)表于 09-19 09:05

    如何選擇DSP芯片的外部存儲(chǔ)器?

    如何選擇DSP芯片的外部存儲(chǔ)器?DSP的速度較快,為了保證DSP的運(yùn)行速度,外部存儲(chǔ)器需要具有一定的速度,否則DSP訪問
    發(fā)表于 04-07 08:45 ?1855次閱讀

    Android手機(jī)的輕量級(jí)訪問控制

    以A ndroid 手機(jī)為平臺(tái), 提出了一種適用于Android 手機(jī)的訪問控制方法, 該方法在Android手機(jī)的內(nèi)核中增加訪問控制模塊, 并根據(jù)手機(jī)用戶定制的
    發(fā)表于 04-17 15:06 ?44次下載
    <b class='flag-5'>Android</b>手機(jī)的輕量級(jí)<b class='flag-5'>訪問</b>控制

    解讀片RAM和外部RAM訪問速度的差異問題

    有些技術(shù),比如總線,看起來它和一般程序員關(guān)系不大。但它卻串聯(lián)起很多問題:為什么片RAM和外部RAM訪問速度有差異;為什么CPU訪問外部RA
    發(fā)表于 10-31 14:17 ?6236次閱讀

    簡(jiǎn)述 Stratix 10 外部存儲(chǔ)器接口作用

    Stratix 10外部存儲(chǔ)器接口指南
    的頭像 發(fā)表于 06-20 04:46 ?2440次閱讀
    簡(jiǎn)述 Stratix <b class='flag-5'>10</b> <b class='flag-5'>外部</b><b class='flag-5'>存儲(chǔ)</b>器接口作用

    什么是Swap分區(qū) NVMe如何使用Swap分區(qū)

    NVMe是固態(tài)存儲(chǔ)時(shí)代的下一個(gè)階段,它提高了SSD和網(wǎng)絡(luò)其他存儲(chǔ)設(shè)備的性能。如今,越來越多的服務(wù)器開始支持NVMe,IT人員是時(shí)候考慮Swap分區(qū)(交換區(qū))的使用問題,來最大限度地利
    發(fā)表于 03-03 11:27 ?4092次閱讀

    Google官方宣布:將推出的Android Q 將被命名為 Android 10

    PingWest品玩8月23日訊,今日,Google官方宣布,將結(jié)束以“甜點(diǎn)”命名Android系統(tǒng)的方式,即將推出的Android Q 將被命名為 Android
    的頭像 發(fā)表于 08-23 10:27 ?2949次閱讀

    訪問外部SDRAM為例來說明降低外部存儲(chǔ)系統(tǒng)功耗的方法

    為了降低DSP外部SDRAM存儲(chǔ)系統(tǒng)的功耗,針對(duì)DSP訪問片外SDRAM的功耗來源特點(diǎn),提出了基于總線利用率動(dòng)態(tài)監(jiān)測(cè)的讀寫歸并方案。該方案動(dòng)態(tài)監(jiān)測(cè)外部
    發(fā)表于 12-02 15:50 ?852次閱讀
    以<b class='flag-5'>訪問</b><b class='flag-5'>外部</b>SDRAM為例來說明降低<b class='flag-5'>外部</b><b class='flag-5'>存儲(chǔ)</b>系統(tǒng)功耗的方法

    MySQL分區(qū)表的類型及原理

    那么在分區(qū)的操作是怎樣進(jìn)行的呢?其實(shí)常規(guī)的CRUD操作以及返回結(jié)果和普通表沒有任何區(qū)別。具體分區(qū)層實(shí)現(xiàn)是先打開并鎖定所有底層表,優(yōu)化器先判斷是否可以過濾部分分區(qū),然后調(diào)用對(duì)應(yīng)的
    的頭像 發(fā)表于 03-29 13:58 ?832次閱讀
    MySQL<b class='flag-5'>分區(qū)</b>表的類型及原理

    Android 11的外部存儲(chǔ)權(quán)限申請(qǐng)流程分享

    Android 11對(duì)應(yīng)的API為30,從這個(gè)版本起要想對(duì)外部存儲(chǔ)進(jìn)行寫入操作的話需要比以往的操作多幾個(gè)步驟,這里簡(jiǎn)單歸納下,具體的原因我就不多話了,具體步驟如下以供參考
    的頭像 發(fā)表于 05-26 11:29 ?6399次閱讀
    <b class='flag-5'>Android</b> 11的<b class='flag-5'>外部</b><b class='flag-5'>存儲(chǔ)</b>權(quán)限申請(qǐng)流程分享

    外部存儲(chǔ)和內(nèi)部存儲(chǔ)的區(qū)別

    Android中根據(jù)數(shù)據(jù)是否為應(yīng)用私有、是否需要給外部應(yīng)用暴露以及數(shù)據(jù)的大小可以有以下幾種選擇: * Shared Preferences * 內(nèi)部存儲(chǔ) * 外部
    的頭像 發(fā)表于 05-26 11:30 ?1518次閱讀
    <b class='flag-5'>外部</b><b class='flag-5'>存儲(chǔ)</b>和內(nèi)部<b class='flag-5'>存儲(chǔ)</b>的區(qū)別

    SD卡外部存儲(chǔ)使用方法

    Android`設(shè)備支持外部存儲(chǔ),比如`SD`卡等,保存在外部存儲(chǔ)的數(shù)據(jù)具有全局可讀性,可供在其他設(shè)備比如電腦
    的頭像 發(fā)表于 05-26 11:32 ?952次閱讀
    SD卡<b class='flag-5'>外部</b><b class='flag-5'>存儲(chǔ)</b>使用方法

    8位PIC單片機(jī)上的存儲(chǔ)訪問分區(qū)

    電子發(fā)燒友網(wǎng)站提供《8位PIC單片機(jī)上的存儲(chǔ)訪問分區(qū).pdf》資料免費(fèi)下載
    發(fā)表于 09-25 14:50 ?0次下載
    8位PIC單片機(jī)上的<b class='flag-5'>存儲(chǔ)</b>器<b class='flag-5'>訪問</b><b class='flag-5'>分區(qū)</b>

    外部存儲(chǔ)器有哪些

    外部存儲(chǔ)器是指用于存儲(chǔ)數(shù)據(jù)的獨(dú)立設(shè)備,它們通常與計(jì)算機(jī)或其他電子設(shè)備連接,并提供額外的存儲(chǔ)空間,允許用戶在不改變主設(shè)備內(nèi)部存儲(chǔ)的情況下保存和
    的頭像 發(fā)表于 09-05 10:42 ?366次閱讀