Существует ли более безопасный обобщенный способ перечисления всех доступных носителей?
С точки зрения SDK имеется внутреннее хранилище (getFilesDir()
) и внешнее хранилище (Environment.getExternalStorageDirectory()
). На Android 1.x / 2.x это будут отдельные разделы; на Android 3.0+ они будут одним разделом.
По определению, делать что-либо помимо того, что предлагает SDK, будет небезопасно. Нет никаких гарантий относительно имен разделов, их роли, можете ли вы читать с них, можете ли вы записывать в них и т. Д. Даже если бы вы собирали базу данных со всеми возможностями (модель, версия ОС, разделы и их статус), эта база данных будет постоянно устаревать в отношении новых устройств и версий ОС.
Вы можете иметь возможность получить доступ к медиафайлам на других разделах с помощью MediaStore. Например, некоторые производители устройств, которые предлагают SD-карту в дополнение к встроенному внешнему хранилищу, индексируют файлы SD-карты, поэтому любые медиа-файлы, содержащиеся на SD-карте, отображаются в MediaStore. Это может позволить вам использовать контент на других разделах, предоставленных производителем (например, на SD-карте), но AFAIK MediaStore не предоставляет средств для размещения новых файлов на таких разделах.