2010-12-22 243 views
17

我正在嘗試使用下面的代碼(已在manifest.xml中設置權限android.permission.WRITE_EXTERNAL_STORAGE)向SDCard寫入文件。 一旦執行nmea_file.createNewFile();它會拋出異常與Permission DeniedAndroid SD卡寫入,權限被拒絕

任何猜測爲什麼會發生這種情況?

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

張貼您的logcat – Falmarri 2010-12-22 06:07:19

+0

您是否使用sharedUerId系統? – 2012-05-10 11:23:04

回答

20

如果SD卡被阻塞對某些操作,象它可能發生:

  1. 準備從插槽卸除SD卡
  2. 設備連接到PC作爲外部USB驅動
+2

愚蠢地忘記我的SD卡也被安裝了,謝謝你的提示! – Dr1Ku 2011-01-22 14:58:07

+0

作爲USB存儲器連接的設備也是我的問題,謝謝! – Ixx 2012-08-15 10:47:17

12

您可能想檢查是否有權訪問SDCARD。這裏是你如何能做到這在代碼:(!)

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

不錯的建議人.. – 2012-02-06 12:18:09

32

添加到manifest.xml中

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

要知道,你的用途-SDK語句可以影響你寫SD卡的能力。

我的AndroidManifest.xml有以下幾點:

<uses-sdk minSdkVersion="8"/> 

而且我可以寫SD卡,甚至沒有,雖然我還沒有宣佈android.permission.WRITE_EXTERNAL_STORAGE任何問題。

當我改變了我的用途-SDK聲明:

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

我所有的SD卡的寫入失敗,拒絕許可!授予android.permission.WRITE_EXTERNAL_STORAGE應該已經聲明,但爲什麼有一個使用sdk聲明它的工作,而另一個它沒有?

0

檢查SD卡是否爲安裝或者如果您正在檢入仿真器。另外不要在創建模擬器的時候提供一些sdcard的大小。然後,您需要在清單中添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />