के FileProvider
कोड पर एक नज़र डालें:
private static PathStrategy parsePathStrategy(Context context, String authority)
...
int type;
while ((type = in.next()) != END_DOCUMENT) {
if (type == START_TAG) {
final String tag = in.getName();
final String name = in.getAttributeValue(null, ATTR_NAME);
String path = in.getAttributeValue(null, ATTR_PATH);
File target = null;
if (TAG_ROOT_PATH.equals(tag)) {
target = buildPath(DEVICE_ROOT, path);
} else if (TAG_FILES_PATH.equals(tag)) {
target = buildPath(context.getFilesDir(), path);
} else if (TAG_CACHE_PATH.equals(tag)) {
target = buildPath(context.getCacheDir(), path);
} else if (TAG_EXTERNAL.equals(tag)) {
target = buildPath(Environment.getExternalStorageDirectory(), path);
}
if (target != null) {
strat.addRoot(name, target);
}
}
}
return strat;
}
FileProvider
टैग root-path
(DEVICE_ROOT निरंतर) की मदद से निर्देशिका का निरपेक्ष pathes स्वीकार कर लिया। तो बस नीचे की तरह माध्यमिक बाहरी डिस्क में अपनी फ़ाइलें फ़ोल्डर में निरपेक्ष पथ जोड़ें:
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/image/" name="image-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/video/" name="video-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/datafile/" name="datafile-ext2" />
<root-path path="/storage/extSdCard/Android/data/com.edufii/files/audio/" name="audio-ext2" />
नोट official documentation<root-path>
के बारे में कुछ नहीं कहा, तो यह एक भविष्य में बदल सकता है।
धन्यवाद! लेकिन मुझे लगता है कि हालांकि मुझे थोड़ा सा झटका लगता है। देखें, दस्तावेज़ों में यह कहा गया है कि बाहरी संग्रहण को सतह पर रखा जाना चाहिए यदि यह बैटरी डिब्बे में एसडी कार्ड स्लॉट की तरह अर्ध-स्थायी है। लेकिन आप कह रहे हैं कि एसडी कार्ड एक माध्यमिक एक्स्टर्नल स्टोरेज है जो मुझे लगता है और 4.4 के रूप में यह स्टोरेज एपीआई के माध्यम से सामने नहीं आया है। – zgulser
असल में एंड्रॉइड के शब्द में, "आंतरिक मेमोरी" और "एसडी कार्ड" दोनों "बाहरी भंडारण" हो सकते हैं।एक उदाहरण के रूप में पुराने फोन मोटोरोला Defy का उपयोग करें, इसमें केवल 1 "बाहरी भंडारण" है, जो एसडी कार्ड है, इसलिए एसडी कार्ड 'प्राथमिक बाहरी भंडारण 'है। मोटो जी, या कुछ नेक्सस फोन, इसे केवल "आंतरिक मेमोरी" मिली है लेकिन कोई एसडी कार्ड नहीं है, इसलिए "आंतरिक मेमोरी" यहां 'प्राथमिक बाहरी भंडारण' है। सैमसंग फोन के लिए, उनके पास आंतरिक मेमोरी और एसडी कार्ड दोनों हैं, इस बार, आंतरिक मेमोरी 'प्राथमिक बाह्य भंडारण' है, जबकि 'एसडी कार्ड' 'माध्यमिक बाहरी भंडारण 'है। –
इस मामले को और भी भ्रमित करने के लिए, यह 'आंतरिक भंडारण' आता है, सच यह है कि सभी फोन में 'आंतरिक स्मृति' होना चाहिए, केवल बड़ा या नहीं। उसी उदाहरण का प्रयोग करें, Defy की आंतरिक स्मृति छोटी है, और केवल 'आंतरिक भंडारण' के रूप में उपयोग की जाती है, जबकि नए मॉडल में आमतौर पर बड़ी आंतरिक मेमोरी होती है, इसलिए इसका केवल एक हिस्सा 'आंतरिक संग्रहण' –