[英]Test programmatically if in Android 10+ the legacy external storage access is disabled
是否有一個簡單的 API 調用可以告訴我在 Android 10 或更高版本上運行的應用程序是否必須使用范圍存儲訪問,也就是說,如果正常文件訪問,即“傳統外部存儲”被禁用? 請注意,即使應用程序在 AndroidManifest.xml 部分聲明:
android:requestLegacyExternalStorage="true"
由於未來谷歌政策的變化,文件訪問仍然可能被拒絕,所以測試這個值是沒有用的。 我發現的唯一方法是測試外部存儲根目錄是否可讀,但為此,應用程序必須首先請求存儲權限,如果禁用舊版存儲,這對其他任何事情都無用。
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}
我想我曾經見過一個新的 API 來檢測這個,但再也找不到那篇文章了......
您可以使用android.os.Environment
中的這兩種方法:
isExternalStorageLegacy(File path)
返回給定路徑的共享/外部存儲媒體是否是包含不屬於應用程序的文件的舊視圖。
isExternalStorageLegacy()
返回主要共享/外部存儲媒體是否是包含不屬於應用程序的文件的舊視圖。
此值可能與應用清單中
requestLegacyExternalStorage
請求的值不同,因為應用可能會根據首次安裝時間繼承其舊版 state。非舊版應用程序可以繼續通過
MediaStore
發現和讀取屬於其他應用程序的媒體。
如果您發現您可以訪問舊存儲,我個人認為最好將數據遷移到范圍存儲並改用它,因為舊存儲可能會在沒有警告的情況下停止工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.