17

我正在尝试使用以下代码将文件写入 SDCard(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);
            }
        }
    }
  }
4

5 回答 5

31

添加到 manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2011-12-08T12:49:42.583 回答
20

如果 SD 卡因某些操作而被阻止,则可能会发生这种情况,例如:

  1. 准备从插槽中卸下 SD 卡
  2. 作为外部 USB 驱动器连接到 PC 的设备
于 2010-12-22T09:28:39.073 回答
12

您可能想要检查您是否有权访问 SDCARD。以下是如何在代码中执行此操作:

if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
    Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show();
}
于 2011-05-28T22:09:13.437 回答
2

请注意,您的 uses-sdk 语句会影响您写入 SD 卡的能力(!)。

我的 AndroidManifest.xml 有以下内容:

<uses-sdk minSdkVersion="8"/>

即使我没有声明 android.permission.WRITE_EXTERNAL_STORAGE,我也可以毫无问题地写入 SD 卡。

当我将我的 uses-sdk 语句更改为:

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

我所有的 SD 卡写入都因权限被拒绝而失败!当然应该声明 android.permission.WRITE_EXTERNAL_STORAGE ,但是为什么使用一个 uses-sdk 语句它可以工作而另一个它没有?

于 2012-04-17T17:50:44.547 回答
1

如果您正在检查模拟器,请检查是否安装了 sdcard。在创建模拟器时也不要为 sdcard 提供一些大小。然后你需要添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
你的清单。

于 2013-02-27T12:41:44.693 回答