1

我正在开发一个应用程序,我必须在其中获取设备上所有可用的存储目录,例如文件目录、板载存储、外部 sdCard 存储(可移动)

但是存储路径因设备而异,例如我有带有 Froyo2.2 的三星 Galaxy tab 7,它具有这三个存储

1:文件目录/mnt/.lfs,

2:板载存储目录/mnt/sdcard,

3:外部sdCard可移动存储目录/mnt/sdcard/external_sd

我正在使用此代码获取这些

    public static String[] getDirectories()
        {
            Log.d(TAG, "getStorageDirectories");
            File tempFile;
            String[] directories = null;
            String[] splits;
            ArrayList<String> arrayList = new ArrayList<String>();
            BufferedReader bufferedReader = null;
            String lineRead;

            try
                {
                    arrayList.clear(); // redundant, but what the hey
                    bufferedReader = new BufferedReader(new FileReader("/proc/mounts"));

                    while ((lineRead = bufferedReader.readLine()) != null)
                        {
                            Log.d(TAG, "lineRead: " + lineRead);
                            splits = lineRead.split(" ");

                            // System external storage
                            if (splits[1].equals(Environment.getExternalStorageDirectory().getPath()))
                                {
                                    arrayList.add(splits[1]);
                                    Log.d(TAG, "gesd split 1: " + splits[1]);
                                    continue;
                                }

                            // skip if not external storage device
                            if (!splits[0].contains("/dev/block/"))
                                {
                                    continue;
                                }

                            // skip if mtdblock device

                            if (splits[0].contains("/dev/block/mtdblock"))
                                {
                                    continue;
                                }

                            // skip if not in /mnt node

                            if (!splits[1].contains("/mnt"))
                                {
                                    continue;
                                }

                            // skip these names

                            if (splits[1].contains("/secure"))
                                {
                                    continue;
                                }

                            if (splits[1].contains("/mnt/asec"))
                                {
                                    continue;
                                }

                            // Eliminate if not a directory or fully accessible
                            tempFile = new File(splits[1]);
                            if (!tempFile.exists())
                                {
                                    continue;
                                }
                            if (!tempFile.isDirectory())
                                {
                                    continue;
                                }
                            if (!tempFile.canRead())
                                {
                                    continue;
                                }
                            if (!tempFile.canWrite())
                                {
                                    continue;
                                }

                            // Met all the criteria, assume sdcard
                            arrayList.add(splits[1]);
                        }

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

            // Send list back to caller

            if (arrayList.size() == 0)
                {
                    arrayList.add("sdcard not found");
                }
            directories = new String[arrayList.size()];
            for (int i = 0; i < arrayList.size(); i++)
                {
                    directories[i] = arrayList.get(i);
                }
            return directories;
        }

但是当我在 Nexus7 4.2.2 Jelly Beans 上运行这段代码时,它在运行时只返回一个路径我怎么知道这是什么路径

并且此存储路径因设备而异

我必须识别板载存储如果可用用户可以选择设备存储如果外部 SD 卡可用则用户可以选择板载或外部存储

4

0 回答 0