2010-12-22 195 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" />