三星Nexus S android 4.0:无法在SD卡上的dir中创建文件

时间:2012-02-13 21:16:42

标签: android permissions

我有装有android 4.0的三星Nexus S设备。我试图在SD卡上的现有文件夹中创建一个文件,并获得“权限被拒绝”。在以下代码中,exists()返回true但canWrite()返回false。为什么呢?

File exst = Environment.getExternalStorageDirectory();
  String exstPath = exst.getPath();


              File d = new File(exstPath+"/TestDir/");
              if (!d.exists())
              {
                    int b = 1;
              }
              if (!d.canWrite())
              {
                    int a = 1;
              }

顺便说一句,我已将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加到清单中,但这没有帮助。

3 个答案:

答案 0 :(得分:0)

手机是否已插入电脑?如果是这样,计算机将控制SD卡而不允许其写入。如果是这种情况,请尝试将连接模式更改为“仅限充电”。

答案 1 :(得分:0)

将getAbsolutePath()附加到第一行,然后它应该起作用:

File exst = Environment.getExternalStorageDirectory().getAbsolutePath();

更新

查看我自己的代码和其他SO答案,我相信你不会使用canWrite来检查SD卡上的路径是否可写。而是使用Environment.MEDIA_MOUNTED:

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
    Log.d("Test", "sdcard mounted and writable");
}
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    Log.d("Test", "sdcard mounted readonly");
}
else {
    Log.d("Test", "sdcard state: " + state);
}

答案 2 :(得分:0)

尽管所有答案都给出了部分建议,但问题很可能是三星非标准的API实施

    String myPath = Environment.getExternalStorageDirectory().getAbsolutePath ;
    // or .getName() or .getPath() <-- these don't return everything you need.
    // same is true for the file version you're trying.

    // you have to append

“/ external_sd /”

到文件名之前的路径。

以下是三星对其“打破”API的解释

http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=162934&messageNumber=1381&startId=zzzzz~&searchType=TITLE&searchText=sdcard

在几个SO帖子中也提到过,但我没有方便的链接......

  • ħ

[编辑2013年5月中旬]以下是此问题的病态:您可以通过提到的各种常规方法获取路径()。然后,只需编写一个简单文件,并将其显示在DDMS文件资源管理器中。尝试硬编码确切的路径和文件名或使用/ external_sd / thing - 在这两种情况下,您将无法读回自己的文件! (或者你可以,但它会包含垃圾。)我们已经在三款不同的S3手机上验证了这一点。将通过他们的RemoteTestingLab网站在三星的“真实”手机上测试更多并报告回来。