精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Android(Q)10 上的分區外部存儲訪問

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

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

在針對目前 小米、華為、Pixel 的幾臺 Android 10 手機做了測試,在不設置 requestLegacyExternalStorage 的前提下得到結論(官方還沒完全開啟限制的前提):

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

圖片

而官方明確表示:

明年(2020),主要平臺版本將要求所有應用都使用分區存儲,無論應用的目標 SDK 級別是多少。因此,您應該提前確保您的應用能夠使用分區存儲。為此,請確保針對搭載 Android 10(API 級別 29)及更高版本的設備啟用了該行為。

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

雖然作為 Android 開發會因為無法對用戶存儲目錄“為所欲為”而頭痛,但是作為用戶卻是感覺欣喜的。

因為長期以來 Android 用戶的本地存儲目錄都十分雜亂,開發者只要申請一次權限就可以“為所欲為”地創建和讀取本地存儲,雖然谷歌在 Android 4.4(API 19))引入了存 SAF(Storage Access Framework) , 但是開發者大部分時候都選擇無視。

我甚至想要一個系統標志出這個文件是誰創建的 API ,因為最近遇到這個問題卻沒有頭緒: 為什么相冊里總是多出一張空白圖片,刪了后不久又重現?

官方解讀

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

注意這個是強制性的,但是會有緩沖期,官方明確額表示,除非你的應用真的有強烈需要訪問專有目錄以及 MediaStore 之外的文件,否則最好使用分區存儲。

使用分區存儲的應用對自己創建的文件始終擁有讀/寫權限,無論文件是否位于應用的專有目錄內 。這說明了默認分區存儲內的文件也只有應用自己能看到,就像是沙盒內,同時 getExternalFilesDir()下的文件會隨著應用卸載而清除。

也就是說應用可以無需申請任何權限使用 getExternalFilesDir()MediaStoreSAF 讀寫文件, 當然如果使用 MediaStore 讀取其他應用的媒體集合時,是需要 READ_EXTERNAL_STORAGE

MediaStore 中支持的類型有:

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

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

  • 應用沒有 ACCESS_MEDIA_LOCATION 權限,那么訪問到的媒體資源中的 Exif 元數據會被修改.
  • 使用 MediaStore.Files 也僅顯示照片、視頻和音頻文件,例如不會顯示表中的 PDF 文件。

總結起來結論就是:

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3923

    瀏覽量

    127136
  • 華為
    +關注

    關注

    215

    文章

    34308

    瀏覽量

    251186
  • API
    API
    +關注

    關注

    2

    文章

    1485

    瀏覽量

    61817
收藏 人收藏

    評論

    相關推薦

    如何在Ubuntu Linux釋放/boot分區中的空間

    在Ubuntu Linux,/boot分區是用于存儲啟動相關的文件的。隨著時間的推移,這個分區可能會變滿,導致系統無法安裝新的內核和更新。本文將介紹如何釋放/boot
    的頭像 發表于 11-28 10:04 ?850次閱讀

    Android中數據存儲的介紹和使用

    APP 在外部存儲的目錄,其目錄為 Android/data//。在訪問該目錄時, app 不需要申請讀寫
    發表于 09-19 09:05

    如何選擇DSP芯片的外部存儲器?

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

    Android手機的輕量級訪問控制

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

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

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

    簡述 Stratix 10 外部存儲器接口作用

    Stratix 10外部存儲器接口指南
    的頭像 發表于 06-20 04:46 ?2539次閱讀
    簡述 Stratix <b class='flag-5'>10</b> <b class='flag-5'>外部</b><b class='flag-5'>存儲</b>器接口作用

    什么是Swap分區 NVMe如何使用Swap分區

    NVMe是固態存儲時代的下一個階段,它提高了SSD和網絡其他存儲設備的性能。如今,越來越多的服務器開始支持NVMe,IT人員是時候考慮Swap分區(交換區)的使用問題,來最大限度地利
    發表于 03-03 11:27 ?4141次閱讀

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

    PingWest品玩8月23日訊,今日,Google官方宣布,將結束以“甜點”命名Android系統的方式,即將推出的Android Q 將被命名為 Android
    的頭像 發表于 08-23 10:27 ?2988次閱讀

    訪問外部SDRAM為例來說明降低外部存儲系統功耗的方法

    為了降低DSP外部SDRAM存儲系統的功耗,針對DSP訪問片外SDRAM的功耗來源特點,提出了基于總線利用率動態監測的讀寫歸并方案。該方案動態監測外部
    發表于 12-02 15:50 ?896次閱讀
    以<b class='flag-5'>訪問</b><b class='flag-5'>外部</b>SDRAM為例來說明降低<b class='flag-5'>外部</b><b class='flag-5'>存儲</b>系統功耗的方法

    MySQL分區表的類型及原理

    那么在分區的操作是怎樣進行的呢?其實常規的CRUD操作以及返回結果和普通表沒有任何區別。具體分區層實現是先打開并鎖定所有底層表,優化器先判斷是否可以過濾部分分區,然后調用對應的
    的頭像 發表于 03-29 13:58 ?939次閱讀
    MySQL<b class='flag-5'>分區</b>表的類型及原理

    Android 11的外部存儲權限申請流程分享

    Android 11對應的API為30,從這個版本起要想對外部存儲進行寫入操作的話需要比以往的操作多幾個步驟,這里簡單歸納下,具體的原因我就不多話了,具體步驟如下以供參考
    的頭像 發表于 05-26 11:29 ?6555次閱讀
    <b class='flag-5'>Android</b> 11的<b class='flag-5'>外部</b><b class='flag-5'>存儲</b>權限申請流程分享

    外部存儲和內部存儲的區別

    Android中根據數據是否為應用私有、是否需要給外部應用暴露以及數據的大小可以有以下幾種選擇: * Shared Preferences * 內部存儲 * 外部
    的頭像 發表于 05-26 11:30 ?1684次閱讀
    <b class='flag-5'>外部</b><b class='flag-5'>存儲</b>和內部<b class='flag-5'>存儲</b>的區別

    SD卡外部存儲使用方法

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

    8位PIC單片機上的存儲訪問分區

    電子發燒友網站提供《8位PIC單片機上的存儲訪問分區.pdf》資料免費下載
    發表于 09-25 14:50 ?0次下載
    8位PIC單片機上的<b class='flag-5'>存儲</b>器<b class='flag-5'>訪問</b><b class='flag-5'>分區</b>

    外部存儲器有哪些

    外部存儲器是指用于存儲數據的獨立設備,它們通常與計算機或其他電子設備連接,并提供額外的存儲空間,允許用戶在不改變主設備內部存儲的情況下保存和
    的頭像 發表于 09-05 10:42 ?1634次閱讀