安卓內存儲互換
❶ 怎樣將華為手機內部存儲的東西移至sd卡中
華為手機將文件移動到microSD卡步驟如下:
長按要移動的文件,點擊「移動」,返回到「本地」的根目錄下,選擇「SD卡」最後選擇「移動」。
❷ 怎樣把手機里的內部存儲,移到SD卡上去,設置的是SD卡
(1)第一種方法:通過手機管家或者安全管家轉移,在這個軟體上有「釋放內存」,或者通過移動軟體或圖片等來實現.
(2)第二種方法:將手機連接到電腦,在電腦上找到圖片儲存的位置,然後將者音樂保存到電腦上。利用讀卡器將電腦與讀卡器連接。然後找到存在電腦上的音樂,利用復制或者發送將音樂轉移到sd卡上。
sd卡就是俗稱的內存卡,sd卡(secure
digital
memory
card)中文翻譯為安全數碼卡,是一種基於半導體快閃記憶器的新一代記憶設備,它被廣泛地於攜帶型裝置上使用。
❸ 安卓內外部存儲完全解析 -- 別再弄混了
安卓開發離不開手機存儲,然而大部分人對於安卓開發中的存儲概念存在誤區,內部外部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中源碼其實就是根據這個方法獲取路徑的
安卓官方文檔大家一定要看,他就是我們開發者的權威呀,聖經呀!!
❹ 安卓內部外部文件存儲
總述
覺得十分有必要搞清楚內存,內部存儲和外部存儲的區別,還有我們在開發中真正將數據存在了手機的哪兒。
先提一個問題:手機設置的應用管理中,每個App下都有清除數據和清除緩存,清除的分別是哪裡的數據?
一 內存,內部存儲和外部存儲
整個存儲空間分為內部存儲和外部存儲兩部分,內部存儲中又包含RAM和ROM等部分。
內部存儲,即InternalStorage,也常說內置存儲卡,這是手機內置的存儲空間,出廠時就被確定,是手機的一個硬體指標。類比電腦的內存。
外部存儲,即ExternalStorage,也常說外置存儲卡,手機出廠時並不存在,是由用戶自由擴展的存儲空間,常見的就是SD卡。類比電腦的外接移動硬碟。
RAM,即常說的運行時內存,是手機運行時存儲數據和指令的地方,注意是運行時內存。類比電腦的內存條。
ROM,用來存放一些系統文件,應用配置和其他數據的地方,是內部存儲中主要存儲區域。類比於Windows電腦的C盤。
上圖中運行內存即RAM,共2G,機身存儲即內部存儲,共8G。
打開手機的文件管理,再點擊手機一項,可以看到下圖:
上圖中箭頭所指的地方,可以進行內部存儲與外部存儲的切換,當前頁為內部存儲下的展示,這只是Android系統存儲數據的一部分而已,大部分數據都對用戶隱藏。至於紅框部分下面繼續講。
二 詳說存儲
一般來說,App軟體大都安裝在內部存儲的ROM區,當然現在也有辦法安裝在SD卡上,但這需要App自身支持及SD卡分區等一系列操作,下面討論的App是安裝在ROM區的。
以Genymotion模擬器設備為例來分析,型號是三星GalaxyS5。直接使用AndroidStudio的DDMS,打開File Explorer,我們可以看到下圖:
這張圖是手機根目錄下的完整目錄結構圖,內外部存儲均包含在內。不過有些文件內容需要root許可權才能看到。
上面展示的內部存儲圖就是其中一部分子目錄。
選其中幾個重要的文件夾介紹。
2.1 /data包:主要存儲手機應用的相關數據。
如上圖的二級目錄中,/data/app文件夾下存放三方應用的apk文件;/data/data文件夾下存放系統應用和三方應用的包私有數據,每個應用都有獨屬於自己的包。
選一個三方應用包——com.X.main,來分析三級目錄——/data/data/com.X.main下都有什麼數據:
由包名不難看出:cache包存放緩存數據,databases包存放使用SQLite存儲的數據,files包存放普通數據(log數據,json型數據等),shared_prefs包存放使用SharedPreference存放的數據。這些包都是由系統創建的。
2.2 /mnt/sdcard/storage包:這三個包,與手機的部分內置存儲卡數據和外置存儲卡數據有關。
上面的完整目錄結構圖中有其子目錄信息展示。
以內置存儲卡來說,通常用sdcard0表示:Android4.1上,首先掛載到目錄/storage/sdcard0上面,/sdcard和/mnt/sdcard都只是指向/storage/sdcard0的軟鏈接;Android4.2上,首先掛載到目錄/storage/emulated/0(0就表示內置存儲)上面,為兼容之前版本,又掛載到/storage/emulated/legency上面,/storage/sdcard0、/sdcard和/mnt/sdcard都只是指向/storage/emulated/legency的軟鏈接。(掛載相當於真正位置,軟鏈接相當於指針)。
/mnt/sdcard是Android2.2及之上版本使用,/sdcard是Android2.1及之下版本使用。
在手機的文件管理中看到的內置存儲卡文件,如上面文件管理頁面的圖,就是/storage/emulated /0包的子目錄,Android包的路徑就是:/storage/emulated/0/Android。
2.3 其他
/dev包:Linux系統的常規文件夾。
/system包:系統配置的文件夾,比如Android系統框架(framework)、底層類庫(lib)、字體(font)等。
三 存儲相關操作
在Android開發中,我們常打交道的存儲空間有三部分。
一是根目錄下路徑為 /data/data/包名/XX 的文件。開發中SQLite數據、SharedPreference數據均保存在這里,雖說我們可以讀寫操作,但這部分空間由系統維護。
二是在外置存儲卡上做存儲。暫時不講。
三是在內置存儲卡中做存儲。在/storage/emulated/0/Android/data包下或與/storage/emulated/0/Android包同級目錄上,建立App包存儲數據,這部分空間均由開發者維護。區別在於/storage/emulated/0/Android/data包下的數據為私有目錄數據,會隨App卸載被清除,與/storage/emulated/0/Android包同級的數據(如系統目錄DCIM包,DOWNLOWN包和bluetooth包,還有下圖中的包)屬於公有目錄數據,不會隨App卸載被清除,這就會造成數據的卸載殘留。
Google官方建議開發者將App的數據存儲在私有目錄即/storage/emulated/0/Android/data包下,這樣卸載App時數據會隨之被系統清除,不會造成數據殘留。
對存儲空間進行操作,首先要獲取存儲空間的存儲路徑,對此Android提供了Environment類和Context類來獲取路徑。
就上面對存儲空間的劃分,第一部分空間對用戶不可見,是在具體包名下的,和特定的App有關,所以對這些數據的訪問需調用Context類中的方法;第三部分空間對用戶可見,私有目錄數據仍與特定App有關,需調用Context類中的方法,而公有目錄數據與App無關,應調用Environment類中的方法。
總結如下圖:
寫了個小程序對Environment類和Context類相關方法測試,如下圖:(冒號前為方法名,冒號後為輸出結果)
四 回答最初提出的問題
手機設置的應用管理中,每個App下都有清除數據和清除緩存,清除的分別是哪裡的數據?
還是用上面的Genymotion模擬器設備來分析,主要測試三部分數據:
內部數據:/data/data/包名/XXX
外部私有數據:/storage/emulated/0/Android/data/包名/XXX
外部公有數據:/storage/emulated/0/包名/XXX
測試結果圖就不上了,直接上結論:
清除緩存:將外部私有數據下的cache包(/storage/emulated/0/Android/data/包名/cache)清除,將內部數據下的cache包下的內容(/data/data/包名/cache/XXX)清除 。
清楚數據:將外部私有數據包(/storage/emulated/0/Android/data/包名)清除,將內部數據下的所有內容(/data/data/包名/XXX)清除;
而兩種操作對外部公有數據均無影響。
❺ 安卓手機的內置存儲和SD卡存儲互換
設置---存儲---首選安裝位置---點選「可卸載的SD卡」
❻ 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內部存儲、外部存儲的區別
❼ 【06-14求助】安卓4.4可以把手機存儲內存和外置SD卡互換嗎
可以即使是秦始皇的長城,也總有一天是要倒的。
❽ 安卓4.2.2內置存儲空間與內存卡調換方法
系統設置-存儲-默認存儲位置 選擇SD卡,或者內部存儲
❾ 安卓手機內外存儲置換有什麼危害
其實這對手機硬體是沒有損害的 就是更改手機系統的指令 讓手機的scard0 換為scard1 這只是一段更改手機系統小代碼 而且這是可逆的 就是說你隨時可以換回來
❿ 怎樣將華為手機內部存儲的東西移至sd卡中
對於EMUI 3.1平台及以下系統的手機,大部分第三方應用默認安裝在內部存儲中,無法直接安裝到MicroSD卡中。部分手機支持將某些應用移至 MicroSD卡中,這個與應用本身有關。
部分機型從EMUI 3.0或EMUI 3.1平台升級到EMUI 4.0平台後,保留了將應用移動到MicroSD的功能,如榮耀7,P8青春版。
出廠版本是EMUI 4.0平台及以上和部分升級到EMUI 4.0平台的手機,出於安全和性能考慮,不支持將應用程序安裝到MicroSD卡上,也不支持安裝在內部存儲的應用程序移動到MicroSD卡上。
應用移動到SD卡方法:
EMUI 2.3:點擊「設置」,在「全部設置」界面的「應用程序」區域,點擊「應用程序管理」,選擇想移動的應用程序,然後點擊「移至SD 卡」。成功移到SD卡後,該選項會變為「移至手機內存」。
EMUI 3.X:點擊「設置」,在「全部設置」界面的「應用」區域,點擊「應用管理」,選擇想移動的應用程序,然後點擊「移至SD 卡」。
部分升級到EMUI 4.0平台的手機:點擊「設置 > 應用管理」,點擊想移動的應用程序,然後點擊「存儲 > 更改」
EMUI 4.0及以上:Android 6.0 及6.0以後的版本中,為了運行流暢和數據安全考慮,谷歌已經不支持將第三方應用程序及其數據移動到 microSD 卡中。與此同時,華為 EMUI4.0 之後的系統也取消了將移動應用程序數據移動到 microSD 卡的操作入口。