sd.canWrite()始终返回false

时间:2011-08-04 13:53:37

标签: java android

我设置了以下我的android清单:

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

我的活动中有以下内容:

File sd = Environment.getExternalStorageDirectory();
boolean can_write = sd.canWrite();

sd返回/ mnt / sdcard

我在我的设备上测试(evo 3d)而不是模拟器。 SD卡已安装。它只在充电模式和没有插入usb电缆时发生.Google上的各种页面和堆栈上的帖子显示完全相同的方法来检查SD卡是否可写,所以我必须丢失一些东西。

更新

我尝试以下代码并抛出ioexception权限被拒绝。

    File TestFile = new File(sd + "/testfile.txt");
    try {
        boolean result = TestFile.createNewFile();
        if(result)
        {
            Log.i("tag","successfully created file");
        } else {
            Log.i("tag","failed to create file");
        }
    } catch (IOException e) {
        Log.e("tag",e.toString() + " " + TestFile);
        return false;
    }

我已经格式化了我的SD卡,重新安装了它,并重新启动了手机,但仍然有同样的错误。

更新

显然,这是我自己的无知导致它失败。我的权限阻止在我的清单的错误部分。再次感谢:)

2 个答案:

答案 0 :(得分:13)

我不会使用sd.canWrite(),实际上,我会使用这样的东西:

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

从这里采取:http://www.xinotes.org/notes/note/1270/

答案 1 :(得分:0)

canWrite()方法默认为目录显示false,这是根据我的观察不知道其背后的原因