【问题标题】:How to Get All Memory Path (Internal or External Memory) list in android如何在android中获取所有内存路径(内部或外部内存)列表
【发布时间】:2013-05-14 12:43:45
【问题描述】:

我在检测 Android 设备中的所有内存路径时遇到问题。 如果我们尝试提供提示和示例,我们将无法获得正确的外部存储器路径。

例如:

如果我们尝试在三星 Tab 2 中获取外部存储器 使用代码::

Environment.getExternalStorageDirectory().getAbsolutePath()

它将为我们提供内部挂载内存路径。 //存储/sdcard0/

经过大量谷歌搜索,我找到了一个显示设备所有路径的应用程序

应用程序名称“ES Explorer” 此应用程序显示所有内存路径。

请提供任何解决方案,以便我们解决问题

【问题讨论】:

标签: android android-sdcard


【解决方案1】:

除了标准 Android SDK 专门支持的这些类型的存储卷之外,还有各种供应商和版本独有的可能性。

您可以通过将/proc/mounts 读取为文本文件来查找所有已挂载的文件系统。

但是:

  • 这只会找到实际挂载的文件系统 - 例如,如果 USB 存储卷被应用程序处理为任意 USB 附件,而不是由 Android 底层的 Linux 操作系统挂载,则它不会找到 USB 存储卷。

  • 您必须应用一些逻辑来过滤掉所有其他各种非通用存储设备并显示在列表中的文件系统。过去,您可以通过查找 "vfat" 作为类型来检测“外部”存储卷,但在最近的 Android 版本中不再使用这种方法

  • 尤其是在最近的Android版本中,从/proc/mounts发现的实际挂载路径可能与习惯使用的路径不匹配,因为习惯路径可能会通过多层符号链接重定向到实际的一个路径

【讨论】:

    【解决方案2】:

    不幸的是,三星处理存储的方式与其他一些设备略有不同。自从他们的 Android 3.2 版本以来,他们还禁止常规应用程序写入外部存储。话虽如此,您仍然可以读取(访问)外部存储。以下是两个可能的外部存储位置的路径。实际上,我已经专门为 Galaxy Tab 2.0(7 英寸)编程了,所以来吧:

    插入 microSD 卡:mnt/extSdCard
    通过三星 USB 适配器连接的外部存储:mnt/UsbDriveA
    “sdcard”存储(不是插入的 SD 卡):getExternalStorageDirectory() 如您所知。

    我尝试了多种方法来使用函数来查找路径,但从来没有运气。但是,这行得通,所以我很满意。希望对你也有帮助。

    【讨论】:

    • 嗨史蒂文,根据你的评论,这个东西只能在三星设备上正常工作,但是当我们尝试在不同的设备中找到外部存储器路径时,它就不能正常工作了......还有其他解决方案吗?找到路径
    • 这就是制造商及其 Android 版本的问题。Android 只知道 MANUFACTURERS 标记为“外部存储目录”的内容。如果getExternalStorageDirectory() 指向一个内部存储位置,那么您将没有系统的方式来查找它。相反,您需要做的是预定义不同的路径方式。如果您曾经进行过任何 Web 编程,您会看到根据客户端运行的浏览器执行相同的案例。如果一个人运行 IE 和 Firefox,您可能会以不同的方式制作/获取对象。这很痛苦,但现在必须这样做。
    • 这里有点术语问题。 getExternalStorageDirectory() 需要指向可用于 Android 为外部存储定义的目的的东西,无论它在哪里物理实现(可移动、焊接等)。其他任何事情都超出了 Android 和供应商独有的要求。另一方面,“内部存储”是指传统上位于 /data 分区上的潜在应用程序私有文件夹。
    • @ChrisStratton,你是对的。这是三星独一无二的。我只是用这种方式将其与外部存储 microSD 插槽以及通过三星适配器 + USB 存储驱动器的外部存储选项分开。不过,我现在要改写它。
    【解决方案3】:

    请尝试使用以下代码。

    public static File FileCache(Context context) {
        // Find the dir to save cached images
        File cacheDir;
        if (android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED))
            cacheDir = new File(
                    android.os.Environment.getExternalStorageDirectory(),
                    "TechTool_Pdf");
        else
            cacheDir = context.getCacheDir();
        if (!cacheDir.exists())
            cacheDir.mkdirs();
        return cacheDir;
    }
    

    【讨论】:

    • 提供代码不适用于外部存储路径(SD卡)。它提供了外部手机存储路径的路径。我们可以使用此代码获得::getExternalStorageDirectory()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多