Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android的外部SDCard文件路径大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Android设备上的外部SDCard的文件路径是否始终为“/ storage / extSdCard”?如果没有,有多少变化?

我需要我的App来测试外部SDCard的可用性.

我使用的是Titanium,它有一个方法Titanium.Filesystem.isExternalStoragePresent()
但是即使外部SDCard未挂载,它始终返回true.

我认为它在本地存储中检测到SDCard,因此返回true.但我真正想要的是检测物理SDCard是否挂载.

可以通过单独检测文件“/ storage / extSdCard”的存在来做到这一点吗?

谢谢.

解决方法

我希望对你有用:)
import android.os.Environment;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ScAnner;


public class MemoryStorage {

    private MemoryStorage() {}

    public static final String SD_CARD = "sdCard";
    public static final String EXTERNAL_SD_CARD = "externalSdCard";

    /**
     * @return True if the external storage is available. false otherwise.
     */
    public static Boolean isAvailable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(statE) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(statE)) {
            return true;
        }
        return false;
    }

    public static String getSdCardPath() {
        return Environment.getExternalStorageDirectory().getPath() + "/";
    }

    /**
     * @return True if the external storage is writable. false otherwise.
     */
    public static Boolean isWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(statE)) {
            return true;
        }
        return false;

    }

    /**
     * @return A map of all storage LOCATIOns available
     */
    public static Map<String,File> getAllStorageLOCATIOns() {
        Map<String,File> map = new HashMap<String,File>(10);

        List<String> mMounts = new ArrayList<String>(10);
        List<String> mVold = new ArrayList<String>(10);
        mMounts.add("/mnt/sdcard");
        mVold.add("/mnt/sdcard");

        try {
            File mountFile = new File("/proc/mounts");
            if (mountFile.exists()) {
                ScAnner scAnner = new ScAnner(mountFilE);
                while (scAnner.hasNext()) {
                    String line = scAnner.nextLine();
                    if (line.startsWith("/dev/block/vold/")) {
                        String[] lineElements = line.split(" ");
                        String element = lineElements[1];

                        // don't add the default mount path
                        // it's already in the list.
                        if (!element.equals("/mnt/sdcard"))
                            mMounts.add(element);
                    }
                }
            }
        } catch (Exception E) {
            e.printStackTrace();
        }

        try {
            File voldFile = new File("/system/etc/vold.fstab");
            if (voldFile.exists()) {
                ScAnner scAnner = new ScAnner(voldFilE);
                while (scAnner.hasNext()) {
                    String line = scAnner.nextLine();
                    if (line.startsWith("dev_mount")) {
                        String[] lineElements = line.split(" ");
                        String element = lineElements[2];

                        if (element.contains(":"))
                            element = element.subString(0,element.indexOf(":"));
                        if (!element.equals("/mnt/sdcard"))
                            mVold.add(element);
                    }
                }
            }
        } catch (Exception E) {
            e.printStackTrace();
        }


        for (int i = 0; i < mMounts.size(); i++) {
            String mount = mMounts.get(i);
            if (!mVold.contains(mount))
                mMounts.remove(i--);
        }
        mVold.clear();

        List<String> mountHash = new ArrayList<String>(10);

        for (String mount : mMounts) {
            File root = new File(mount);
            if (root.exists() && root.isDirectory() && root.canWrite()) {
                File[] list = root.listFiles();
                String hash = "[";
                if (list != null) {
                    for (File f : list) {
                        hash += f.getName().hashCode() + ":" + f.length() + ",";
                    }
                }
                hash += "]";
                if (!mountHash.contains(hash)) {
                    String key = SD_CARD + "_" + map.size();
                    if (map.size() == 0) {
                        key = SD_CARD;
                    } else if (map.size() == 1) {
                        key = EXTERNAL_SD_CARD;
                    }
                    mountHash.add(hash);
                    map.put(key,root);
                }
            }
        }

        mMounts.clear();

        if (map.isEmpty()) {
            map.put(SD_CARD,Environment.getExternalStorageDirectory());
        }
        return map;
    }
}

大佬总结

以上是大佬教程为你收集整理的Android的外部SDCard文件路径全部内容,希望文章能够帮你解决Android的外部SDCard文件路径所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。