Получить тип хранилища локального пути

Если у меня есть следующие пути:

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

В основном у меня есть следующие вопросы:

  • Как узнать, на каком хранилище они находятся? (USB-накопитель, внешний накопитель, внутренний накопитель)
  • Как узнать, какого они типа? (основное хранилище (у меня есть прямой доступ r/w), вторичное хранилище (на Android >=4.4, у меня нет прямого доступа к w, и мне нужно получить это право через Storage Access Framework, если мне это нужно))
  • Как узнать, что такое ROOT-путь?

Результаты, которых я хочу

  1. Это: внутреннее хранилище, основное хранилище, корневой путь /storage/emulated/0/
  2. Это: USB-накопитель, дополнительное хранилище, корневой путь /storage/UsbDriveA/
  3. Это: внешнее хранилище, вторичное хранилище, корневой путь /sdcard/

Я знаю, что пути могут различаться от телефона к телефону, так как же мне узнать, какой путь находится в каком хранилище и какие разрешения у меня есть на какие пути? Я знаю, что могу догадаться по названиям путей, но меня интересует надежный способ, который работает на всех (или, по крайней мере, на большинстве) телефонов...


person prom85    schedule 08.02.2016    source источник


Ответы (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");
}
person adev    schedule 08.02.2016
comment
Для меня это не ново... На самом деле все дело в том, чтобы выяснить, какой путь к какому хранилищу принадлежит, и найти КОРНЕВОЙ путь любого хранилища. Я хочу сказать пользователю выбрать корень своей SD-карты или USB-накопителя, а затем я хочу проверить, правильно ли они выбрали путь (не подкаталог и не неправильное хранилище) - person prom85; 08.02.2016
comment
Как описано здесь developer.android.com/reference/android. /os/ метод getExternalStorageDirectory() позволяет указать на верхний (корневой) каталог внешнего хранилища. - person adev; 08.02.2016