天天看點

Android存儲通路及目錄 Android存儲通路及目錄

  Android支援外部存儲(case-insensitive filesystem with immutable POSIX permission classes and modes)。

  外部存儲可以通過實體媒體提供(如SD卡),也可以通過将内部存儲中的一部分封裝而成,裝置可以有多個外部存儲執行個體。

  從Android 1.0開始,寫操作受權限WRITE_EXTERNAL_STORAGE保護。

  從Android 4.1開始,讀操作受權限READ_EXTERNAL_STORAGE保護。

  從Android 4.4開始,應用可以管理在它外部存儲上的特定包名目錄,而不用擷取WRITE_EXTERNAL_STORAGE權限。

  比如,一個包名為com.example.foo的應用,可以自由通路外存上的Android/data/com.example.foo/目錄。

  外部存儲對資料提供的保護較少,是以系統不應該存儲敏感資料在外部存儲上。

  特别地,配置和log檔案應該存儲在内部存儲中,這樣它們可以被有效地保護。

  對于多使用者的情況,一般每個使用者都會有自己獨立的外部存儲,應用僅對目前使用者的外部存儲有通路權限。

  還有多使用者或者多外部存儲的情況,此文不再讨論。

  為了不污染使用者的根命名空間,一般不會直接使用這個外部存儲的根目錄。

   從Android 4.4這兩個方法不需要讀寫權限,是針對于本應用來說,如果要通路其他應用的相關目錄,還是需要聲明讀寫權限。

  Android 4.4之前的版本要通路的話還是要聲明讀寫權限的,如果沒有在manifest中寫權限,上面兩個get方法都會傳回null。

  與上面兩個方法形成對比的是下面兩個方法:

  這兩個方法得到的是記憶體上的目錄。

  這些目錄都是屬于應用的,當應用被解除安裝的時候,裡面的内容都會被移除,但是不要依賴于系統的操作。

  在MI 2S上輸出Log:

Android存儲通路及目錄 Android存儲通路及目錄

  在三星S5660上(API Level 9,注釋掉了兩個方法):

Android存儲通路及目錄 Android存儲通路及目錄

  android.os.Environment

  External Storage Technical Information

  Context

繼續閱讀