0

在我的应用程序中,我正在使用以下方法访问外部存储(它可以是内部存储或 SD 卡的一部分,在我的 Xperia V 中,它返回内部存储的路径(不是 SD 卡)。

String root = Environment.getExternalStorageState().toString();

当我尝试在没有安装 SD 卡的 Galaxy Note 上运行该应用程序时,我发现上述方法不会返回存储路径。(如果应用程序获得成功的路径,则应该保存文件)。那么我能知道有没有一种方法可以访问外部存储(没有安装 SD 卡)。?

谢谢

4

3 回答 3

1

要获取外部存储路径,请尝试这样..

String root = Environment.getExternalStorageDirectory().getPath();

它将重新调整外部存储的确切路径

于 2013-09-24T12:17:36.100 回答
0

首先你的应用必须有写外部存储的权限,它在manifest文件中指定,请看下面:

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

其次,我们应该检查是否安装了外部媒体,请查看我的一个 Android 应用程序的工作片段,如果外部存储不存在,它将为您创建一个目录,否则返回该目录的 File 对象。

File getRecordingDirectory()
    {
        File recordingDir = null;

            // get the state of external storage
        String externalStorageState = Environment.getExternalStorageState();

        if(externalStorageState.equals(Environment.MEDIA_MOUNTED))
        {
            File extDir =
                    Environment.getExternalStorageDirectory();

            recordingDir = new File(extDir, "AudioRecorder");

            if(!recordingDir.exists())
            {
                if(!recordingDir.mkdirs())
                {
                Log.e("RECORDER", "Unable to create Silent Recorder recordings directory.");
                }
            }
        }
        return recordingDir;
    }
于 2013-09-24T12:33:28.247 回答
0
private String getInternalSDPath() {
    File file = new File("/system/etc/vold.fstab");
    FileReader fr = null;
    BufferedReader br = null;

    try {
        fr = new FileReader(file);
    } catch (FileNotFoundException e) {

    }
    String path = null;
    try {
        if (fr != null) {
            br = new BufferedReader(fr);
            String s = br.readLine();
            while (s != null) {
                if (s.startsWith("dev_mount")) {
                    String[] tokens = s.split("\\s");
                    path = tokens[2]; // mount_point
                    if (Environment.getExternalStorageDirectory()
                            .getAbsolutePath().equals(path)) {
                        break;
                    }
                }
                s = br.readLine();
            }
        }
    } catch (IOException e) {

    } finally {
        try {
            if (fr != null) {
                fr.close();
            }
            if (br != null) {
                br.close();
            }
        } catch (IOException e) {

        }
    }
    return path;
}

要获取外部 SD 卡挂载目录,只需更改:

                    if (Environment.getExternalStorageDirectory()
                            .getAbsolutePath().equals(path)) {
                        break;
                    }

至:

                    if (!Environment.getExternalStorageDirectory()
                            .getAbsolutePath().equals(path)) {
                        break;
                    }

注意:此方法是特定于设备的,我可以使用它,因为我知道我只针对具有额外内部存储的三星设备进行开发。如果您希望这适用于所有设备,则必须进行其他更改。

于 2013-09-24T12:36:21.170 回答