มีการเรียก API แบบง่าย ๆ ที่จะบอกฉันว่าแอปที่รันบน Android 10 หรือใหม่กว่าต้องใช้การเข้าถึงที่เก็บ Scoped หรือไม่นั่นคือถ้าการเข้าถึงไฟล์ปกติหรือที่รู้จักในชื่อ "Legacy External Storage" ถูกปิดใช้งานหรือไม่ โปรดทราบว่าแม้ว่าแอปใน AndroidManifest.xml จะประกาศส่วน:
android:requestLegacyExternalStorage="true"
การเข้าถึงไฟล์อาจยังถูกปฏิเสธเนื่องจากการเปลี่ยนแปลงนโยบายของ Google ในอนาคตดังนั้นการทดสอบค่านี้จึงไม่มีประโยชน์ วิธีเดียวที่ฉันพบคือการทดสอบว่าไดเรกทอรีรากของที่เก็บข้อมูลภายนอกนั้นสามารถอ่านได้หรือไม่ แต่สำหรับแอปนั้นจะต้องขอสิทธิ์ในการเก็บข้อมูลก่อนซึ่งเป็นประโยชน์สำหรับสิ่งอื่นใดหากปิดใช้งานที่เก็บข้อมูลดั้งเดิม
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 ใหม่เพื่อตรวจจับสิ่งนี้ แต่ไม่พบบทความนั้นอีกต่อไป ...
an app running on Android 10 or later must use Scoped Storage access
? คุณช่วยอธิบายความหมายของสิ่งนั้นได้อย่างไร คุณมีความคิดในเรื่องใด ฉันรู้ว่าตัวอย่างเช่น Storage Volumes และ Storage Manager ที่นำมาให้ N นั้นเลิกใช้แล้วสำหรับ Q.