【问题标题】:Get storage type of local path获取本地路径的存储类型
【发布时间】:2016-02-08 09:05:33
【问题描述】:

如果我有如下路径:

  1. /storage/emulated/0/...
  2. /storage/UsbDriveA/...
  3. /sdcard/...

我基本上有以下几个问题:

  • 如何确定它们位于哪个存储上? (U 盘、外部存储、内部存储)
  • 如何确定它们的类型? (主存储(我有直接读写访问权限),二级存储(在 android >=4.4 上,我没有直接 w 访问权限,如果需要,我需要通过Storage Access Framework 获取此权限))李>
  • 如何找出 ROOT 路径是什么?

我想要的结果

  1. 这是:内部存储,主存储,根路径是/storage/emulated/0/
  2. 这是:U 盘,辅助存储,根路径为/storage/UsbDriveA/
  3. 这是:外部存储,二级存储,根路径为/sdcard/

我知道路径可能因手机而异,那么我如何找出哪个路径位于哪个存储上以及我在哪些路径上拥有哪些权限?我知道我可以通过路径的名称来猜测,但我对一种适用于所有(或至少大多数)手机的可靠方式感兴趣......

【问题讨论】:

    标签: android storage android-sdcard android-external-storage


    【解决方案1】:

    您需要通过 Environment 类检查每个主存储和辅助存储的访问权限。你应该这样做:

    Boolean canWrite =  Environment.getExternalStorageDirectory().canWrite(); if(canWrite)// do something with externalstorage
    

    并使用 Environment.getRootDirectory() 作为内部根目录

    对于 USB,您需要使用

    进行检查
    public static boolean isConnected(Context context) {
        intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
        return intent.getExtras().getBoolean("connected");
    }
    

    【讨论】:

    • 这对我来说并不新鲜......实际上这就是找出哪个路径属于哪个存储并能够找到任何存储的ROOT路径。我想告诉用户选择他们的 sd 卡或 USB 棒的根目录,然后我想检查他们是否选择了正确的路径(不是子目录,也不是错误的存储)
    • 如此处所述developer.android.com/reference/android/os/… getExternalStorageDirectory() 方法允许您指向外部存储的顶层 tevel(root) 目录。
    猜你喜欢
    • 2020-01-26
    • 2017-06-28
    • 2016-09-20
    • 1970-01-01
    • 2015-10-29
    • 2021-06-13
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多