【问题标题】:Android SD card writing, Permission DeniedAndroid SD卡写入,权限被拒绝
【发布时间】:2010-12-22 06:04:59
【问题描述】:

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

【问题讨论】:

  • 你是用sharedUerId来系统吗?

标签: android android-sdcard


【解决方案1】:

添加到 manifest.xml

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

【讨论】:

  • 我希望你看清楚这个问题,他说他已经在清单中获得了这个权限。
【解决方案2】:

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

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

【讨论】:

  • 愚蠢地忘记了我的 SD 卡也已安装,谢谢提示!
【解决方案3】:

您可能需要检查您是否有权访问 SDCARD。以下是您可以在代码中执行此操作的方法:

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

【讨论】:

    【解决方案4】:

    请注意,您的 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 语句它可以工作而另一个它没有呢?

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2016-11-15
      • 1970-01-01
      • 2019-09-18
      相关资源
      最近更新 更多