我怎样才能在三星和所有其他设备上获得正确的外部存储?

don*_*221 8 android

官方方法Environment.getExternalStorageDirectory()似乎无法在三星设备上运行...

它返回"/ sdcard /"而不是真正的路径"/ sdcard/external_sd /",你可以参考以下帖子

三星Galaxy上的Android SD卡特性

是否有其他方法可以检测外部实际存储路径并适用于所有设备?或者只是教我如何避免这个问题?

谢谢.

小智 9

我希望下面的代码是有用的.该代码找到可移动外部存储(即SD卡)的路径.

        File file = new File("/system/etc/vold.fstab");
        FileReader fr = null;
        BufferedReader br = null;

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

        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) {
            e.printStackTrace();
        } finally {
            try {
                if (fr != null) {
                    fr.close();
                }            
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
Run Code Online (Sandbox Code Playgroud)


Blu*_*ell 7

你不能尝试这样的事情:

  String url = Environment.getExternalStorageDirectory();
  if(android.os.Build.DEVICE.contains("Samsung") || android.os.Build.MANUFACTURER.contains("Samsung")){
            url = url + "/external_sd/";
  }
Run Code Online (Sandbox Code Playgroud)

  • 我想这是唯一的方法,谢谢.我真的很讨厌三星设备,开发人员有很多例外= _ =" (2认同)