2013-03-19 11 views
39

मैं अपने सैमसंग गैलेक्सी नेक्सस 4.2.2 पर चल रहे अपने एसडीकार्ड में एक फ़ाइल सहेजने की कोशिश कर रहा हूं। मेरे ऐप से मैंgetExternalStorageDirectory काम नहीं कर रहा है

Environment.getExternalStorageDirectory() 

उपयोग कर रहा हूँ लेकिन यह रिटर्न

/storage/emulated/0/ 

जहाँ मेरे एसडी कार्ड जानकारी के लिए स्थित है कौन सा नहीं है। क्या मेरे पास कोई एसडीकार्ड सही रास्ता पाने के लिए उपयोग किया जा सकता है?

+0

क्या आप और कोड दिखा सकते हैं ताकि हम आपके द्वारा किए गए प्रयासों को प्राप्त कर सकें? –

+0

असल में यह हो सकता है। ओएस शायद एसडी कार्ड लोड करता है, और रूट –

+0

में एक ड्राइव के रूप में आभासी प्रतिनिधित्व बनाता है, बहुउद्देशीय सुविधा –

उत्तर

5

Environment.getExternalStorageDirectory() जो भी डिवाइस निर्माता को "बाहरी भंडारण" माना जाता है, को संदर्भित करता है। मैं एसडी कार्ड से कुछ और हो सकता हूं।

आप यहाँ और अधिक जानकारियां प्राप्त कर सकते हैं: Find an external SD card location

11

वास्तव में, यह सही स्थान है।

एंड्रॉइड से 4,2 के बाद, Google ने कई उपयोगकर्ता खाते पेश किए। प्रत्येक उपयोगकर्ता का अपना बाहरी भंडारण होता है, जिसमें विशिष्टता बनाए रखने के लिए पथ में उपयोगकर्ता आईडी होती है।

प्राथमिक (डिफ़ॉल्ट) उपयोगकर्ता की आईडी 0 है। इसलिए आपको /storage/emulated/0/ बाहरी संग्रहण के पथ के रूप में मिलता है।

+2

के साथ पथ मान्य है या प्रतिस्थापित/0 उस फ़ोल्डर में केवल विरासत है, न कि 0 फ़ोल्डर।मेरे अन्य ऐप्स पर इस विधि का उपयोग करने में कोई समस्या नहीं है, बस यह एक। –

+0

@LukePring यह एक सिम्लिंक है। यह एक वास्तविक फ़ोल्डर नहीं है। –

+1

आपका मतलब है कि वहां एक सिम्लिंक होना चाहिए।/भंडारण/नकली/0: ऐसी कोई फ़ाइल या निर्देशिका – VMcPherron

0

ज़रूर? आपको लगता है कि आपका एसडीकार्ड कहाँ घुड़सवार है? उस निर्देशिका पर ls -l करने का प्रयास करें - यह शायद /storage/emulated/0/ पर एक सिम्लिंक है।

+0

मैं इस समय एक अलग ऐप के लिए ls -l का उपयोग कर रहा हूं, सिम्लिंक ऐप तक दिखाता है लेकिन मेरे टर्मिनल पर नहीं जो अजीब बात है। –

-1

getExternalFilesDir() या getExternalStoragePublicDirectory() का उपयोग करने का प्रयास करें।

Android 4.2 documentation

+0

पर्यावरण .getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES) का पथ/भंडारण/नकली/0/चित्र का पथ देता है जो अभी भी मेरे N7 – VMcPherron

+0

पर अमान्य है और मैं समझता हूं कि यह रनटाइम के दौरान एप्लिकेशन (adb नहीं) के लिए उपलब्ध होना चाहिए, लेकिन नहीं कर सकता उस निर्देशिका में किसी भी फाइल को ढूंढें जब मेरे पास स्पष्ट रूप से एकाधिक फाइलें हों। (एलएस/एमएनटी/खोल/नकली/0/चित्र/* जेपीजी) – VMcPherron

9

से मैं अभी सीखा इस android.permission.WRITE_EXTERNAL_STORAGE अनुमति की कमी से निपटने का Jelly Bean का तरीका है। मैंने एंड्रॉइड के पुराने संस्करणों के साथ ऐसा व्यवहार नहीं देखा है।

बस अपने AndroidManifest.xml को यह पंक्ति जोड़ें:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+24

यह इसे प्रति ठीक नहीं करता है। मेरे पास मेरे मैनिफेस्ट में यह सेट है और यह अभी भी **/स्टोरेज/नकली/0 ** के रूप में वापस आता है। जब मैं डिवाइस के लिए खोल का उपयोग करता हूं **/भंडारण/नकली/0 ** मौजूद नहीं है। ** ** ** के बजाय ** ** विरासत ** है। –

+4

@MichaelNguyen आप adb shell (यहां तक ​​कि रूट के रूप में भी नहीं) से **/संग्रहण/नकली/0 ** निर्देशिका नहीं देख सकते हैं। यह केवल उपयोगकर्ता द्वारा लॉन्च की गई प्रक्रियाओं में मौजूद है। आपको इसे डिवाइस पर टर्मिनल एमुलेटर से देखना चाहिए, और इसे किसी ऐप से एक्सेस करना चाहिए। – ge0rg

1

मुझे लगता है कि इसकी वजह से genymotion एमुलेटर का उपयोग कर के, पथ सही है और ग्रहण में यह स्थित

File Explorer - > mnt - > shell - > emulated -> 0 

यह आशा पर मदद करता है;)

0

मैंने किसी भी तरह से मेरे सिम्लिंक को/स्टोरेज/एम्यूलेटेड/0 पर खो दिया था, जिससे इसी तरह की विफलता आई थी। मैंने एक तस्वीर लेने के लिए कैमरा ऐप का उपयोग किया था। मैंने देखा कि चित्रों के विवरण में कहा गया है कि यह/भंडारण/नकली/0 के भीतर था, हालांकि यह निर्देशिका फ़ाइल एक्सप्लोरर से मौजूद नहीं थी। फिर मैंने फोन को रिबूट किया। रिबूट के बाद लिंक मौजूद था।

संबंधित मुद्दे