真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android的存儲,手機存儲android是什么

Android 內(nèi)部存儲/外部存儲 及 讀寫權(quán)限

Android 使用 VFS (Virtual File System) 虛擬文件系統(tǒng)。VFS提供了供存儲設(shè)備掛載的節(jié)點,同一存儲設(shè)備經(jīng)過分區(qū)后,不同的分區(qū)可以掛載到不同的節(jié)點上,如手機的內(nèi)置存儲卡。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供遂昌網(wǎng)站建設(shè)、遂昌做網(wǎng)站、遂昌網(wǎng)站設(shè)計、遂昌網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、遂昌企業(yè)網(wǎng)站模板建站服務(wù),十余年遂昌做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

內(nèi)置存儲卡 / 外置SD卡

內(nèi)部存儲 / 外部存儲

VFS 的目錄以 / 為根節(jié)點,根節(jié)點下面又有不同的節(jié)點。物理存儲設(shè)備就是掛載到這些節(jié)點上。

內(nèi)部存儲卡/外置SD卡 ≠ 內(nèi)部存儲/外部存儲

首先明確, 內(nèi)置存儲卡/外置SD卡 是在 物理層面 相對于 手機大眾用戶 來說的。

外置SD卡:可手動插拔的SD卡。

內(nèi)置存儲卡:焊接在手機內(nèi)部不可拆卸的存儲卡。

而, 內(nèi)部存 /外部存儲 是在 文件系統(tǒng)邏輯層面 相對于 開發(fā)者 來說的,指具體的路徑。

一般針對某個應(yīng)用而言的,屬于該應(yīng)用的存儲路徑叫內(nèi)部存儲,反之為外部存儲。

路徑: /data/data/package_name

/data/data/ 下都是已安裝應(yīng)用的目錄,該目錄下包含的文件都是以包名作為文件名的目錄,例如 /data/data/com.sankuai.meituan

獲取內(nèi)部存儲的方式如下:

其中,參數(shù) mode 指創(chuàng)建模式,一種 4 種

注意: Android 7.0 以上 android.os.Build.VERSION.SDK_INT=Build.VERSION_CODES.N 使用3/4 常量時,將會導致SecurityException,這意味著 不能通過名稱共享私有文件 。

嘗試共享 URI將會導致FileUriExposedException,StrictMode API政策禁止在您的應(yīng)用外部公開。如果您的應(yīng)用需要與其他應(yīng)用共享私有文件,則可以使用 FileProvider 與 FLAG_GRANT_READ_URI_PERMISSION 配合使用。 Android 7.0 行為變更 通過FileProvider在應(yīng)用間共享文件吧

外部存儲,可以是 外置SD卡 或 內(nèi)置存儲卡的部分分區(qū)。

外部存儲,分為 公共目錄 和 私有目錄

獲取方式

檢查可用性的方法:

Android 4.3 以下,只能通過 Context#getExternalFilesDir(type) 來獲取外部存儲在內(nèi)置存儲卡分區(qū)的私有目錄,無法獲取外置SD卡。

Android 4.3 開始,可以通過 Context#getExternalFilesDirs(type) 獲取一個File數(shù)組,包含了內(nèi)置存儲卡分區(qū)和外置SD的私有目錄地址。

可以使用兼容庫的靜態(tài)方法 ContextCompate.getExternalFilesDirs() 兼容 4.3。

感謝以下文章作者

解析Android內(nèi)部存儲、外部存儲的區(qū)別

Android 文件存儲-將數(shù)據(jù)保存在data目錄下

??在平常使用Android手機的時候,我們都知道,幾乎每一個app都在/data/data/相應(yīng)的包名的文件夾下保存數(shù)據(jù)。那這些數(shù)據(jù)怎么進行保存的呢?在這里,將簡單的介紹一下。

??Context類中有一個openFileOutPut方法,這個方法可以將我們的數(shù)據(jù)保存在data目錄下的文件里面。

??openFileOutput(String name, int mode)方法中帶兩個參數(shù),第一個參數(shù)是文件名,這里只能寫文件的名字,不能包含路徑,因為所有的數(shù)據(jù)都保存在/data/data/應(yīng)用包名/files/目錄下;第二個參數(shù)是文件的操作模式,有MDOE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

??其中MODE_PRIVATE模式的是默認的操作模式,每一次寫入的內(nèi)容時,都會覆蓋前面的內(nèi)容;MODE_APPEND模式表示的是每次寫入的內(nèi)容追加在前面的后面;MODE_WORLD_READABLE表示的是其他應(yīng)用程序可以對該文件進行寫的操作;MODE_WORLD_WRITEABLE表示的是其他應(yīng)用程序可以對該文件進行讀的操作。不過在后面的兩種模式過于危險,google已經(jīng)在Android 4.2中廢棄了。

??openFileOutput()方法返回的是一個FileOutPutStream的對象,得到了這個對象,就可以使用Java的IO流來對文件的使用了。

??點擊保存過后,就會把我們的數(shù)據(jù)保存在data目錄下。

??如果我們想要查看的話,就可以在Android studio(我是2.3.2的版本)中找到Tools-Android-Android Device Monitor

??再打開/data/data/應(yīng)用包名/files/,發(fā)現(xiàn)有一個文件,就是我們之前創(chuàng)建的一個文件。

??我們可以點擊右上角的圖標進行相應(yīng)的導出工作,對相應(yīng)的文件進行導出操作。

??在Context類中,與openFileOutput方法對應(yīng)的是openFileInput方法,用戶從data目錄讀取相應(yīng)的數(shù)據(jù)。這個方法相較于openFileOutput方法簡單一些。

效果示意圖:

安卓內(nèi)外部存儲完全解析 -- 別再弄混了

安卓開發(fā)離不開手機存儲,然而大部分人對于安卓開發(fā)中的存儲概念存在誤區(qū),內(nèi)部外部SD卡傻傻分不清?

以下引用來自對 官方文檔 的理解

呵呵呵,先別說話,然而重點來了(敲黑板),按照官方的說法,

內(nèi)部存儲是指系統(tǒng)的存儲空間,沒有root是訪問不到的呦親,比如sharedPreferenced或者database都是保存在這里面的。

外部存儲,又分為 2 部分:

然而現(xiàn)實中,常常有同事把手機那個32G,64G存儲叫做內(nèi)部存儲= =,寶寶好累,人家明明是 ExternalStorage ?。?/p>

希望本篇能讓大家對內(nèi)外部存儲有一個正確鮮明的認識

getFilesDir()

路徑如下

文檔 云:若想操作該路徑,你需要一個輸出流:

就像這樣:

注: this 是 context 對象

路徑下會看到新文件哦

如果你還想讀取的話, 文檔 云:你需要一個輸入流:

Log如下

getCacheDir()

文檔 云:

路徑如下:

特別的,還有g(shù)etDir() :

getDir("- -!.txt", Context.MODE_PRIVATE).getAbsolutePath()

路徑如下:

app_是系統(tǒng)自己加上去的

內(nèi)部存儲就是系統(tǒng)的存儲,沒有root你是看不到的,內(nèi)部存儲最大特點就是可以用Context對象調(diào)用各個獲取路徑的方法。比如: context.fileList()

那就是

下的文件遍歷。

而 deleteFile("ABC") 就是

刪除下名為 ABC 的文件

/br/br/br

操作外部存儲你首先需要以下權(quán)限

當你申請了write權(quán)限,那么read權(quán)限默認也就通過啦

再判斷狀態(tài):

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState))

Environment.getExternalStorageDirectory()

這個路徑根據(jù)手機廠家不同會有些許變化

直接傳入 Environment 中的常量獲取相應(yīng)的路徑,如下:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS));

或者

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));

公有目錄下,系統(tǒng)會區(qū)分不同類別 (例如鈴聲在系統(tǒng)設(shè)置中顯示為鈴聲而不是音樂)

4.4以后訪問該目錄不再需要權(quán)限了

getExternalFilesDir(String type)

eg.

getExternalFilesDir(Environment.DIRECTORY_MUSIC)

特別的:ContextCompat下的

ContextCompat.getExternalFilesDirs(context,type)

返回一個File[],在4.4以后第一條數(shù)據(jù)默認外部主存儲目錄,第二條數(shù)據(jù)就是sd卡路徑啦,但是注意4.4之前是沒有第二條數(shù)據(jù)的哦

該目錄下的特點是卸載程序后,該目錄和其下所有文件均會被刪除

getExternalCacheDir()

注意,使用該目錄注意管理空間,你不能等系統(tǒng)幫你清理,而是自己清理不再需要的緩存

特別的:ContextCompat下的

ContextCompat.getExternalCacheDirs()

道理同上

發(fā)現(xiàn)特點了嗎朋友,無論外部內(nèi)部,只有路徑中有包名,那么就是私有的,而且是隨著程序的卸載而被刪除的, 有包名的路徑均是Context中的方法,而公有的路徑均是Environment調(diào)用的

這個貨真真是要了老命,一般的方法根部不好使,結(jié)合網(wǎng)上有的方法加上公司項目中的方法,總結(jié)如下:

百分百好用的獲取SD卡路徑方法:

最后集合 path 中的值就是SD卡根目錄

雖然無視版本百分百好用,但是如果你的手機有SD卡槽卻沒插SD卡,該方法最后 path 返回的是 null ,也就是說該方法無法判斷到底是沒插SD卡還是根本不支持SD卡

其實還有一種方法

String path = System.getenv("SECONDARY_STORAGE");

該方法只要你手機支持SD卡,無論你插沒插SD卡,均會返回SD卡路徑,但是 6.0及以上該方法被移除

Environment中源碼其實就是根據(jù)這個方法獲取路徑的

安卓官方文檔大家一定要看,他就是我們開發(fā)者的權(quán)威呀,圣經(jīng)呀??!

android存儲分區(qū)和android11填坑

安卓設(shè)備的物理存儲 分為兩大塊,內(nèi)部存儲和外部存儲

存儲分區(qū),是android系統(tǒng)對APP訪問外部存儲 添加了限制;開啟存儲分區(qū)后 APP只能訪問自己目錄下的文件和公共文件,

需要特別指出的是android 10 雖支持存儲分區(qū) 但可不開啟,對于android11 來說,必須開啟存儲分區(qū),android11必須使用存儲分區(qū),

即使設(shè)置 android:requestLegacyExternalStorage="true" 也無效

對原來的內(nèi)部存儲沒有什么影響,但是對外部存儲有影響;

外部 存儲有兩個區(qū)域 app私有區(qū)域和app共享區(qū)域;

例如:在android 10以下的手機設(shè)備上 調(diào)起相機拍照,使用 Uri.fromFile 的方式來創(chuàng)建照片文件是 沒有問題的,但是 android11上,即使調(diào)起了相機拍照后 也無法成功保存照片

android 7 后支持 應(yīng)用之間共享文件,這就是FileProvider的作用;

使用FileProvider 需要在清單文件中 聲明,注意一下 android:authorities指定的屬性值,盡可能的保證唯一性 一般以".fileProvider" 結(jié)尾

其中 file_paths文件在 Resource/xml 下,原來指定共享的 文件路徑;

然后使用FileProvider API 來生成File的Uri路徑;

這個"com.xx.fileprovider" 就是 授權(quán)認證的信息,如果填寫的和清單文件中的不一致 會 導致文件讀寫時 錯誤;

Android數(shù)據(jù)存儲之File總結(jié)

在使用File存儲App數(shù)據(jù)時,我們需要了解Android系統(tǒng)的存儲系統(tǒng)。Android的存儲分為內(nèi)部存儲和外部存儲。

由于Android系統(tǒng)的廠商比較多,對于外部存儲目錄的定義有所不同,可能在根目錄下的mnt,sdcard和storage下。以storage為例,打開emulated/0目錄,外部存儲目錄就出現(xiàn)了。雖然可以通過多種路徑打開外部存儲文件,但是最終他們的路徑是相同的:

mnt:

storage:

sdcard:

外部存儲目錄下包含兩大類:公有目錄和私有目錄

私有目錄:

對比下來External有以下幾點優(yōu)點:

缺點:

內(nèi)部存儲與外部存儲權(quán)限申請對比如下:

首先我們要獲取外部存儲目標文件的路徑:

然后確定自己需要創(chuàng)建的文件名,結(jié)合上面的到的路徑,創(chuàng)建一個File對象:

Android系統(tǒng)默認數(shù)據(jù)清理的路徑是,內(nèi)部存儲目錄中相應(yīng)的cache文件夾中的文件和外部存儲中相應(yīng)的cache文件夾中的文件。

你的app的internal storage 目錄是以你的app的包名作為標識存放在Android文件系統(tǒng)的特定目錄下[data/data/com.example.xx]。 從技術(shù)上講,如果你設(shè)置文件為可讀的,那么其他app就可以讀取你的internal文件。然而,其他app需要知道你的包名與文件名。若是你沒有設(shè)置為可讀或者可寫,其他app是沒有辦法讀寫的。因此只要你使用MODE_PRIVATE ,那么這些文件就不可能被其他app所訪問。

另外記住一點,內(nèi)部存儲在你的APP卸載的時候,會一塊被刪除,因此,我們可以在cache目錄里面放置我們的圖片緩存,而且cache與files的差別在于,如果手機的內(nèi)部存儲空間不夠了,會自行選擇cache目錄進行刪除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因為這個文件只有在APP被卸載的時候才會被刪除。還有要注意的一點是,如果應(yīng)用程序是更新操作,內(nèi)部存儲不會被刪除,區(qū)別于被用戶手動卸載。

不管你是使用 getExternalStoragePublicDirectory() 來存儲可以共享的文件,還是使用 getExternalFilesDir() 來儲存那些對于你的app來說是私有的文件,有一點很重要,那就是你要使用那些類似DIRECTORY_PICTURES 的API的常量。那些目錄類型參數(shù)可以確保那些文件被系統(tǒng)正確的對待。例如,那些以DIRECTORY_RINGTONES 類型保存的文件就會被系統(tǒng)的media scanner認為是ringtone而不是音樂。

在開發(fā)中,不建議往內(nèi)部存儲中寫太多的數(shù)據(jù),畢竟空間有限。外部存儲在使用的時候最好能夠?qū)⑽募娣旁谒接心夸浵?,這樣有利于系統(tǒng)維護,也避免用戶的反感。

徹底理解android中的內(nèi)部存儲與外部存儲

Android存儲挖坑記

緩存文件可以放在哪里?它們各自的特點是什么


網(wǎng)頁題目:android的存儲,手機存儲android是什么
URL分享:http://weahome.cn/article/dsidcsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部