Как получить доступ к внешней карте Micro SD телефона?

Кто-нибудь знает, как можно получить SD-карту телефона?

Я знаю, что кто-то скажет мне свое getExternalStorageDirectory() или же Environment.getExternalStoragePublicDirectory(),

Но, к сожалению, это не всегда указывает на внешнюю SD-карту во всех моделях. Например, я пытался в одной модели Samsung работает нормально, а другой нет, LG нет. А также, согласно документации, также не всегда внешняя SD-карта.

Вот,

* "не смущайтесь словом" внешний "здесь.

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

Традиционно это SD-карта, но она также может быть реализована как встроенное хранилище в устройстве, которое отличается от защищенного внутреннего хранилища и может быть смонтировано в качестве файловой системы на компьютере."*

В моем приложении я хочу, чтобы пользователь использовал только SD-карту.

Как я могу побороть это?

6 ответов

Я столкнулся с той же проблемой. Я не знал, как получить доступ к расположению внешней SD-карты. Я разрабатывал приложение, в котором мне нужно было получить доступ к внешней SD-карте, чтобы прочитать и написать кое-что. Я пробовал разные методы, в том числе предопределенные библиотеки Android. Вот методы, которые я использовал:

Это были промахи:

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File myFile = new File(path, "test.txt"); 

File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath()+"/Download");

File f = getExternalFilesDir(null); 
File file = new File(f,"test.txt");

Все они обращались к внутреннему хранилищу "/storage/sdcard0" или "/storage/emulated/0". Причина в том, что в устройстве Android часть внутреннего хранилища действует как внешнее хранилище. Так что, если у вас есть внутреннее хранилище около 16 Гб или больше, и есть возможность расширить устройство с помощью SD-карты, то это единственный способ получить доступ к внешней SD-карте, потому что даже встроенные функции и библиотеки Студия Android получит доступ к внутренней памяти как к внешней.

Наконец я использовал это:-

String extFilePath = "/storage/sdcard1/Download";
File myFile = new File(extFilePath, "test.txt");

и это сработало. Итак, вы видите, где предопределенные библиотеки / функции Android не работают, я смог выполнить задачу с помощью простой строки.

Помимо этого, если вы хотите проверить путь к внешнему хранилищу вашего устройства, попробуйте следующее:-

String sdpath,sd1path,usbdiskpath,sd0path;

if(new File("/storage/extSdCard/").exists())
{sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path", sdpath);}

if(new File("/storage/sdcard1/").exists())
{sd1path="/storage/sdcard1/";
Log.i("Sd Card1 Path",sd1path);}

if(new File("/storage/usbcard1/").exists())
{usbdiskpath="/storage/usbcard1/";
Log.i("USB Path",usbdiskpath);}

if(new File("/storage/sdcard0/").exists())
{sd0path="/storage/sdcard0/";
Log.i("Sd Card0 Path",sd0path);}

Проверка их может помочь вам узнать, какой путь выбрать при доступе к внешней SD-карте. Я надеюсь, что это помогает другим.

Проверьте ответ CommonsWare по той же теме /questions/35064803/najti-raspolozhenie-vneshnej-sd-kartyi/35064823#35064823

Он упомянул, что мы не можем различить встроенную внешнюю память мобильного устройства и съемную внешнюю память.

But by Aleadam answer /questions/2660380/environmentgetexternalstoragedirectory-ne-vozvraschaet-put-k-semnomu-hranilischu/2660385#2660385 we can only check that is the External Storage is removable or not with isExternalStorageRemovable() function.

I hope you will get idea.

Вы можете ниже условия проверить, доступна ли SDCard или нет

if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {

     //Check for the file
     File appFolder = new File(Environment.getExternalStorageDirectory() + File.separator
                + context.getString(R.string.app_name));

     boolean exist = appFolder.exists();
}

Съемный путь хранения различен в устройстве к устройству.
Примером Съемного пути являются:
1. т / мин
2. mnt / externalsd
3. mnt / external_sd


Мое устройство использует mnt/external_sd.

Вы можете проверить путь вашего файла из файла vold.fstab.
этот файл находится в системной папке.
Путь к файлу:

"/Etc/vold.fstab"

Я столкнулся с той же проблемой с моим последним устройством. Затем я обнаружил, что съемная SD-карта доступна по адресу /mnt/ext_sdcard/. и это сработало для меня. Я был в состоянии перечислить все файлы, хранящиеся на съемной внешней SD-карте в этом месте.

Ниже приведен код: новый файл ("/mnt/ext_sdcard/"). ListFiles();

Вы можете получить путь следующим образом.....

File sdCardRoot = Environment.getExternalStorageDirectory();
        PATH = sdCardRoot.toString();

Если путь не существует, то вы должны создать путь с помощью mkdir().....

private File getTempFile(Context context) {
        final File path = new File(Environment.getExternalStorageDirectory(),
                context.getPackageName());
        if (!path.exists()) {
            path.mkdir();
        }
        return new File(path, "new.png");
    }

Выше функция вернет файл...

Другие вопросы по тегам