Как получить доступ к внешней карте 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.
этот файл находится в системной папке.
Путь к файлу:
Я столкнулся с той же проблемой с моим последним устройством. Затем я обнаружил, что съемная 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");
}
Выше функция вернет файл...