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