मैं एंड्रॉइड 27 एमुलेटर पर परीक्षण कर रहा हूं और कुछ निर्देशिकाओं को पार करने की कोशिश कर रहा हूं।

जब मैं /storage/emulated निर्देशिका को पार करने का प्रयास करता हूं, तो विधि listFiles() null लौटाती है, जबकि वहां /storage/emulated/0 मौजूद है।

यहाँ एक परीक्षण कोड है:

File emuDir = new File("/storage/emulated");
File[] emuDirFiles = emuDir.listFiles(); // returns null.

File exStorageDir = new File("/storage/emulated/0")
exStorageDir.exists(); // returns true

पी.एस. मैंने मेनिफेस्ट में उचित संग्रहण अनुमति जोड़ दी है और रनटाइम अनुमति प्रदान की है।

2
Amir Rezazadeh 7 सितंबर 2019, 11:13

2 जवाब

सबसे बढ़िया उत्तर

संक्षिप्त उत्तर: Android आपके ऐप को /storage/emulated तक पहुंचने की अनुमति नहीं देगा।

लंबा उत्तर और आपके समाधान के काम न करने का कारण:

आपने कौन सी अनुमतियां दी हैं? मुझे लगता है कि वे EXTERNAL_WRITE/EXTERNAL_READ हैं और वे आपको /storage/emulated/0 तक पहुंच प्रदान करेंगे जो getExternalStorageDirectory() द्वारा लौटाई गई वही निर्देशिका है। Android /storage/emulated को पढ़ने/लिखने की अनुमति नहीं देता है। एक साइड नोट के रूप में, यदि File.canRead(), false लौटाता है, तो आप उस निर्देशिका का listFiles() नहीं कर सकते। आपके मामले में, भले ही आपने अनुमतियां जोड़ी हों emuDir.canRead(), false लौटाएंगे, क्योंकि वे अनुमतियां /storage/emulated/0 तक पहुंच प्रदान करती हैं, /storage/emulated तक नहीं।

2
Farid 7 सितंबर 2019, 09:53

यह स्कोप्ड स्टोरेज से संबंधित है। इसे हल करने के लिए लिखें

 android:requestLegacyExternalStorage="true"

नीचे की तरह मेनिफेस्ट फ़ाइल के एप्लिकेशन टैग में।

solution

अधिक जानकारी के लिए: https://medium .com/@pednekarshashank33/android-10s-scoped-storage-image-picker-gallery-camera-d3dcca427bbf

1
Salman Khalid 6 अगस्त 2020, 11:15