[英]Android /storage/emulated/0 and /data/media/0 different permissions
[英]`/storage/emulated/legacy/` vs `/storage/emulated/0/` vs `data/data/myApp'
我想在我的應用程序中保存一個imageFile
我希望“Google+ cropper app”能夠使用它。
但后來打開了另一張圖片。
我想這是權限問題。
在我的代碼中我保存在這里:
這是外部存儲嗎? Environment.getExternalStorageDirectory().getAbsolutePath()
返回: /storage/emulated/0/myApp/file1.tmp
使用adb shell
看到文件實際上保存在: /storage/emulated/legacy/myApp/file1.tmp
為什么有區別?
我應該使用這個地方嗎? 這是外部存儲嗎?
getAppContext().getFilesDir().getParent()
返回:`data / data / myApp'
從歷史上看,內部和外部存儲之間的差異如下......
內部: Android設備的內部閃存,用於為每個應用分配私有存儲。 分配的存儲受到保護,以防止任何其他應用程序訪問(root用戶設備除外)。
外部:在許多情況下,SD卡沒有安全限制,即所有應用程序都可以訪問“外部”存儲的所有區域。
隨着Android的新版本的出現以及新設備內部閃存越來越多,內部和外部之間的差異正在變得模糊。 例如,我的Nexus 7沒有SD卡插槽。
對於沒有真正外部存儲的設備,Android仍然需要提供模擬的外部存儲,以便與舊版應用保持兼容。 換句話說,RAM在物理上是內部的(不可移動的),但是它的一部分被分區,並且Android文件系統API將該分區視為“外部”並且是世界可讀的。
至於你看到的外部存儲路徑,如...
/storage/emulated/0/myApp/file1.tmp
/storage/emulated/legacy/myApp/file1.tmp
...這些中的一個或另一個(可能兩者)是到模擬外部目錄和文件的相同部分的重定向或“虛擬”路徑。
這就是為什么必須始終使用正確的API調用來訪問文件和目錄而不是假設硬編碼路徑,因為它可能因設備而異。
如果您使用Environment.getExternalStorageDirectory()
,您可以確信任何其他執行相同操作的應用程序都可以訪問您在其中創建的任何文件。
如果您使用getFilesDir()
那么您將訪問私有分配給您的應用程序的內部存儲的根目錄,並且只能訪問您的應用程序(盡管如我所提到的,根電話可以訪問私有/內部存儲)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.