2010-12-22 11 views
17

मैं नीचे कोड के साथ एसडीकार्ड में एक फ़ाइल लिखने की कोशिश कर रहा हूं (अनुमति android.permission.WRITE_EXTERNAL_STORAGE पहले से ही manifest.xml में सेट है)। nmea_file.createNewFile(); के निष्पादन पर यह Permission Denied के साथ अपवाद फेंकता है।एंड्रॉइड एसडी कार्ड लेखन, अनुमति अस्वीकार

कोई अनुमान यह क्यों हो रहा है?

if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
    { 
    Log.d(TAG, "Sdcard was not mounted !!"); 
    } 
else 
    { 
    File nmea_file; 
    File root = Environment.getExternalStorageDirectory(); 
    FileWriter nmea_writer = null; 
    try { 
     nmea_file = new File(root,"NMEA.txt"); 
     if(!nmea_file.exists()) { 
       Log.w(TAG, "File Doesn't Exists!"); 
       nmea_file.createNewFile(); 
      } 
     nmea_writer = new FileWriter(nmea_file); 
     nmea_writer.append(nmea); 
     nmea_writer.flush(); 
    } 
    catch (IOException e) 
    { 
     Log.w(TAG, "Unable to write", e); 
    } 
    finally 
    { 
     if (nmea_writer != null) 
     { 
      try 
      { 
       nmea_writer.close(); 
      } 
      catch (IOException e) 
      { 
       Log.w(TAG, "Exception closing file", e); 
      } 
     } 
    } 
    } 
+2

अपना लॉककैट – Falmarri

+0

पोस्ट करें क्या आप सिस्टम में sharedUerId का उपयोग कर रहे हैं? –

उत्तर

20

यह हो सकता है अगर एसडी कार्ड, कुछ कार्यों के लिए अवरुद्ध है जैसे:

  1. स्लॉट से एसडी कार्ड उतरना करने के लिए तैयार
  2. डिवाइस बाहरी यूएसबी ड्राइव के रूप में पीसी से जुड़ा
+2

मूर्खता से भूल गया कि मेरा एसडी कार्ड भी घुड़सवार था, टिप के लिए धन्यवाद! – Dr1Ku

+0

यूएसबी स्टोरेज के रूप में जुड़े डिवाइस भी मेरी समस्या थी, धन्यवाद! – Ixx

12

आप यह जांचना चाहेंगे कि आपके पास SDCARD तक पहुंच है। यहाँ कैसे आप कोड में यह कर सकते हैं यह है: (!)

if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ 
    Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show(); 
} 
+0

अच्छा सुझाव आदमी .. –

32

जोड़ें Manifest.xml को

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

मुझे आशा है कि आप इस सवाल को स्पष्ट रूप से पढ़ लेंगे, उन्होंने कहा कि उन्हें पहले से ही प्रकट होने की अनुमति थी। – nnhthuan

2

ध्यान रखें कि आपका उपयोग करता है-sdk बयान आप SD कार्ड पर लिखने की क्षमता को प्रभावित कर सकता हो ।

<uses-sdk minSdkVersion="8"/> 

और मैं भले ही मैं android.permission.WRITE_EXTERNAL_STORAGE घोषित नहीं किया था बिना किसी समस्या के SD कार्ड पर लिख सकते हैं:

मेरे AndroidManifest.xml निम्नलिखित था।

जब मैं करने के लिए अपने उपयोग करता है-sdk बयान बदल दिया है:

<uses-sdk android:targetSdkVersion="9" minSdkVersion="8" /> 

मेरे सभी एसडी कार्ड लेखन एक अनुमति नहीं दी साथ में विफल रहा! अनुमोदित है कि android.permission.WRITE_EXTERNAL_STORAGE घोषित किया जाना चाहिए था, लेकिन एक प्रयोग-एसडीके कथन के साथ क्यों काम किया और दूसरा यह नहीं था?

0

चेक कि क्या sdcard है घुड़सवार या आप एमुलेटर में नहीं की जाँच कर रहे हैं। एमुलेटर बनाने के समय एसडीकार्ड के लिए कुछ आकार देने के लिए भी धुंधला न करें। फिर आपको अपने मेनिफेस्ट में
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
जोड़ने की आवश्यकता है।

+0

माउंट स्टेटस की जांच के लिए एपीआई संदर्भ यहां: http://developer.android.com/reference/android/os/Environment.html – uprego

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