A. 榮耀手機移動文件時無法獲取外部存儲器讀寫許可權
這是沒有授權的原因。
具體操作步驟如下:打開手機點擊一下【設置】,進入設置頁面打開【應用】,打開後點擊一下【許可權管理】,打開許可權管理頁面點擊一下【許可權】,進入許可權設置頁面選擇【存儲】,在這里就可以設置各個應用到存儲許可權了。
外部儲存器就相當於以前的內存卡一樣,現在一般很少用到了。
B. 外置存儲許可權是什麼意思
品牌型號:華為p50系統:HarmonyOS 3
外置存儲許可權是部分舊版安卓手機的功能,需要開啟這個功能才能把應用安裝到SD卡上。外置儲存也就是移動存儲指攜帶型的數據存儲裝置,指帶有存儲介質且(一般)自身具有讀寫介質的功能,不需要或很少需要其他裝置(例如計算機)等的協助。現代的移動存儲主要有移動硬碟、USB盤和各種記憶卡。
常見的外部存儲器有硬碟、優盤、光碟等;外部存儲器所存儲的數據資料,斷電後不會丟失,常用於數據備份、數據拷貝、數據存儲(文件和程序)。外部存儲器的特點是儲存容量大、價格低廉,但是存取數據慢。
1、硬碟。常見的硬碟種類有機械硬碟(HDD)和固態硬碟(SSD)。
2、機械硬碟。機械硬碟由碟片、磁頭、控制電機、碟片轉軸、磁頭控制器、數據轉換器等組成。常見的機械硬碟有3.5寸和2.5寸之分,2.5寸硬碟常用於筆記本等攜帶型電腦、小型機箱等, 3.5寸硬碟常用於台式機、伺服器;機械硬碟的特點是存儲容量大,價格低,但是數據存取慢,佔用空間大,發熱量較大,比SSD的噪音也大。
3、NVME固態硬碟。固態硬碟由電子存儲晶元陣列組成,即存儲單元和控制單元,其中存儲單元有FLASH晶元、DRAM晶元等類型。其特點是存儲速度快,但是價格較機械硬碟來說高出許多。
4、優盤。優盤,亦稱U盤,快閃記憶體檔,是較為常見的可移動式存儲設備;其價格相對低廉,存取速度快,佔用空間小,USB介面即插即用,常用於桌面PC之間的文件互相傳輸。
5、光碟。分為CD光碟和DVD光碟,同時也包含可擦寫和不可擦寫光碟之分。光碟由基板、記錄層、反射層、保護層、印刷層組成。需要用專門的光碟驅動設備(光碟機)來讀取或者刻錄數據。光碟常用於數據備份,資料存儲,程序存放(WINDOWS安裝光碟,程序光碟等)。
6、軟盤。常見的軟盤有1.44M,3.5寸英寸軟盤。它是最早使用的可移動存儲介質。需要通過軟盤驅動來使用。其特點為其存儲容量小,讀取速度慢,已被U盤、可移動硬碟取代。
7、磁帶。被稱為磁表面存儲器(磁表面存儲設備);由磁帶傳送機構、伺服控制電路、讀寫磁頭、讀寫電路和有關邏輯控制電路等組成。其特點為儲容量大、價格低廉、攜帶方便。
C. 安卓內外部存儲完全解析 -- 別再弄混了
安卓開發離不開手機存儲,然而大部分人對於安卓開發中的存儲概念存在誤區,內部外部SD卡傻傻分不清?
以下引用來自對 官方文檔 的理解
呵呵呵,先別說話,然而重點來了(敲黑板),按照官方的說法,
內部存儲是指系統的存儲空間,沒有root是訪問不到的呦親,比如sharedPreferenced或者database都是保存在這裡面的。
外部存儲,又分為 2 部分:
然而現實中,常常有同事把手機那個32G,64G存儲叫做內部存儲= =,寶寶好累,人家明明是 ExternalStorage !!
希望本篇能讓大家對內外部存儲有一個正確鮮明的認識
getFilesDir()
路徑如下
文檔 雲:若想操作該路徑,你需要一個輸出流:
就像這樣:
注: this 是 context 對象
在
路徑下會看到新文件哦
如果你還想讀取的話, 文檔 雲:你需要一個輸入流:
Log如下
getCacheDir()
文檔 雲:
路徑如下:
特別的,還有getDir() :
getDir("- -!.txt", Context.MODE_PRIVATE).getAbsolutePath()
路徑如下:
app_是系統自己加上去的
內部存儲就是系統的存儲,沒有root你是看不到的,內部存儲最大特點就是可以用Context對象調用各個獲取路徑的方法。比如: context.fileList()
那就是
下的文件遍歷。
而 deleteFile("ABC") 就是
刪除下名為 ABC 的文件
</br></br></br>
操作外部存儲你首先需要以下許可權
當你申請了write許可權,那麼read許可權默認也就通過啦
再判斷狀態:
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState))
Environment.getExternalStorageDirectory()
這個路徑根據手機廠家不同會有些許變化
直接傳入 Environment 中的常量獲取相應的路徑,如下:
Environment.(Environment.DIRECTORY_ALARMS));
或者
Environment.(Environment.DIRECTORY_PICTURES));
公有目錄下,系統會區分不同類別 (例如鈴聲在系統設置中顯示為鈴聲而不是音樂)
4.4以後訪問該目錄不再需要許可權了
getExternalFilesDir(String type)
eg.
getExternalFilesDir(Environment.DIRECTORY_MUSIC)
特別的:ContextCompat下的
ContextCompat.getExternalFilesDirs(context,type)
返回一個File[],在4.4以後第一條數據默認外部主存儲目錄,第二條數據就是sd卡路徑啦,但是注意4.4之前是沒有第二條數據的哦
該目錄下的特點是卸載程序後,該目錄和其下所有文件均會被刪除
getExternalCacheDir()
注意,使用該目錄注意管理空間,你不能等系統幫你清理,而是自己清理不再需要的緩存
特別的:ContextCompat下的
ContextCompat.getExternalCacheDirs()
道理同上
發現特點了嗎朋友,無論外部內部,只有路徑中有包名,那麼就是私有的,而且是隨著程序的卸載而被刪除的, 有包名的路徑均是Context中的方法,而公有的路徑均是Environment調用的
這個貨真真是要了老命,一般的方法根部不好使,結合網上有的方法加上公司項目中的方法,總結如下:
百分百好用的獲取SD卡路徑方法:
最後集合 path 中的值就是SD卡根目錄
雖然無視版本百分百好用,但是如果你的手機有SD卡槽卻沒插SD卡,該方法最後 path 返回的是 null ,也就是說該方法無法判斷到底是沒插SD卡還是根本不支持SD卡
其實還有一種方法
String path = System.getenv("SECONDARY_STORAGE");
該方法只要你手機支持SD卡,無論你插沒插SD卡,均會返回SD卡路徑,但是 6.0及以上該方法被移除
Environment中源碼其實就是根據這個方法獲取路徑的
安卓官方文檔大家一定要看,他就是我們開發者的權威呀,聖經呀!!
D. Android 內部存儲/外部存儲 及 讀寫許可權
Android 使用 VFS (Virtual File System) 虛擬文件系統。VFS提供了供存儲設備掛載的節點,同一存儲設備經過分區後,不同的分區可以掛載到不同的節點上,如手機的內置存儲卡。
內置存儲卡 / 外置SD卡
內部存儲 / 外部存儲
VFS 的目錄以 / 為根節點,根節點下面又有不同的節點。物理存儲設備就是掛載到這些節點上。
內部存儲卡/外置SD卡 ≠ 內部存儲/外部存儲
首先明確, 內置存儲卡/外置SD卡 是在 物理層面 相對於 手機大眾用戶 來說的。
外置SD卡:可手動插拔的SD卡。
內置存儲卡:焊接在手機內部不可拆卸的存儲卡。
而, 內部存 /外部存儲 是在 文件系統邏輯層面 相對於 開發者 來說的,指具體的路徑。
一般針對某個應用而言的,屬於該應用的存儲路徑叫內部存儲,反之為外部存儲。
路徑: /data/data/package_name
/data/data/ 下都是已安裝應用的目錄,該目錄下包含的文件都是以包名作為文件名的目錄,例如 /data/data/com.sankuai.meituan
獲取內部存儲的方式如下:
其中,參數 mode 指創建模式,一種 4 種
注意: Android 7.0 以上 android.os.Build.VERSION.SDK_INT>=Build.VERSION_CODES.N 使用3/4 常量時,將會導致SecurityException,這意味著 不能通過名稱共享私有文件 。
嘗試共享 file://URI URI將會導致FileUriExposedException,StrictMode API政策禁止在您的應用外部公開file://URL。如果您的應用需要與其他應用共享私有文件,則可以使用 FileProvider 與 FLAG_GRANT_READ_URI_PERMISSION 配合使用。 Android 7.0 行為變更 通過FileProvider在應用間共享文件吧
外部存儲,可以是 外置SD卡 或 內置存儲卡的部分分區。
外部存儲,分為 公共目錄 和 私有目錄
獲取方式
檢查可用性的方法:
Android 4.3 以下,只能通過 Context#getExternalFilesDir(type) 來獲取外部存儲在內置存儲卡分區的私有目錄,無法獲取外置SD卡。
Android 4.3 開始,可以通過 Context#getExternalFilesDirs(type) 獲取一個File數組,包含了內置存儲卡分區和外置SD的私有目錄地址。
可以使用兼容庫的靜態方法 ContextCompate.getExternalFilesDirs() 兼容 4.3。
感謝以下文章作者
解析Android內部存儲、外部存儲的區別
E. Android 添加讀寫外部存儲許可權
1 靜態修改: AndroidManifest中添加SD卡讀寫的許可權
2 動態修改:java判斷並獲取許可權
F. 怎麼允許外部儲存許可權 儲存空間許可權怎麼開啟
1、手機安裝ROOT。
2、打開軟體,選擇一鍵ROOT就可以了。
3、設置默認存儲位置。
4、打開設置,選擇存儲,選擇默認存儲位置,設置到需要的位置。
5、打開需要設置的軟體,會自動彈出許可權提示設置,選擇就OK。
6、打開許可權設置軟體,設置允許設置或修改存儲位置就可以了。
G. 相冊外置存儲許可權在哪裡找
這里分享下相冊外置存儲許可權設置的方法。
設備:華為mate30
系統:安卓4.5
1、首先打開手機點擊設置選項。
H. 從相冊選擇需要讀取外置存儲權
這個許可權要求屬於正常范圍。如果一個軟體需要從相冊內讀取照片,確實是需要存儲許可權。
如果軟體沒有存儲許可權,就無法訪問你的存儲器讀取出照片(文件),如果你擔心隱私問題,可以在軟體讀取照片後,再關閉這個許可權即可。