Android SD卡写入,权限被拒绝

我想写一个文件到SDCard下面的代码(权限android.permission.WRITE_EXTERNAL_STORAGE已经在manifest.xml中设置)。 执行nmea_file.createNewFile(); 它会抛出Permission Deniedexception。

任何猜测为什么会发生这种情况?

 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); } } } } 

Solutions Collecting From Web of "Android SD卡写入,权限被拒绝"

添加到manifest.xml

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

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

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

你可能想检查你是否有权访问SDCARD。 这里是你如何做到这一点在代码中:

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

请注意,您的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声明它的工作,而另一个它没有?

检查模拟器是否安装了 SD卡。 也不要在创build模拟器的时候foget给一些尺寸的SD卡。 那么你需要添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在你的清单。