developer.android.google.cn/preview/pri…android
存儲訪問框架:developer.android.google.cn/guide/topic…shell
FileProvider:developer.android.google.cn/training/se…app
要在 Android Q 測試版 1 中啓用此行爲變動,請在終端窗口中執行如下命令:框架
adb shell sm set-isolated-storage on
ide
查看是否已生效測試
adb shell getprop sys.isolated_storage_snapshot
ui
測試您的應用時,您能夠經過在終端窗口中運行如下命令來爲外部文件存儲訪問權限啓用兼容性模式:google
adb shell cmd appops set your-package-name android:legacy_storage allow
code
停用兼容性模式,請在 Android Q 上卸載而後從新安裝您的應用,或在終端窗口中運行如下命令get
adb shell cmd appops set your-package-name android:legacy_storage default
developer.android.google.cn/preview/pri…
私有文件沙盒
媒體文件共享集合
照片訪問
跨應用文件 讀取和存儲跨應用文件
Google 把 Android Q 上會被沙箱化條件設爲 Target SDK 至少爲 Q (29) 的應用或者運行 Android Q 時全新安裝的應用。不符合這個條件的應用將會運行在兼容模式下,在兼容模式中應用行爲大體和過去相同,以保證不會出現嚴重的數據丟失問題。兼容模式在應用從新安裝後會被關閉。
注意:即便應用Target SDK < 29也會被沙箱化
沙箱化後,沙箱目錄:/sdcard/Android/sandbox/packagename/,應用不能再經過 Java File API 來互相訪問內部存儲文件數據,應用訪問 「/sdcard」 實質上訪問的是你的應用的沙箱目錄,能夠理解爲「存儲重定向」; getExternalStoragePublicDirectory(),getExternalStorageDirectory(),/storage/emulated/0 都會直接映射到沙箱目錄;訪問這些文件路徑存在自動映射,所以正常直接使用理論上都是沒問題的。
可能存儲數據丟失:當用戶手機從Android Q如下版本升級到Android Q版本的時候,應用訪問不了以前保存在/sdcard下面的內容
沙箱空間跟過去的內部存儲空間內 「Android/data/packagename」 的文件夾同樣,會在應用卸載時被永久清除沒法恢復,所以好比一些用戶主動下載保存的文件當然不能存在沙箱空間,須要存到沙箱外面
sdcard
getExternalStorageDirectory
getExternalStoragePublicDirectory
/emulated/0