簡體   English   中英

如果在 Android 10+ 中禁用舊版外部存儲訪問,則以編程方式測試

[英]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中的這兩種方法:

此值可能與應用清單中requestLegacyExternalStorage請求的值不同,因為應用可能會根據首次安裝時間繼承其舊版 state。

非舊版應用程序可以繼續通過MediaStore發現和讀取屬於其他應用程序的媒體。

如果您發現您可以訪問舊存儲,我個人認為最好將數據遷移到范圍存儲並改用它,因為舊存儲可能會在沒有警告的情況下停止工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM