Android SD卡写入,权限被拒绝

时间:2010-12-22 06:05:00

标签: android android-sdcard

我正在尝试使用下面的代码(已在manifest.xml中设置权限android.permission.WRITE_EXTERNAL_STORAGE)将文件写入SDCard。 执行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);
            }
        }
    }
  }

5 个答案:

答案 0 :(得分:32)

添加到manifest.xml

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

答案 1 :(得分:20)

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

  1. 准备从插槽中卸载SD卡
  2. 作为外部USB驱动器连接到PC的设备

答案 2 :(得分:12)

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

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

答案 3 :(得分: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,但为什么一个使用-sdk语句它起作用而另一个却没有?

答案 4 :(得分:0)

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