afilechooser не возвращает путь для устройства с внешним и внутренним хранилищем
Я использую модуль afilechooser, чтобы выбрать файл с устройства пользователя. Устройство имеет как внутреннее, так и внешнее хранилище. Когда я выбираю файл из внутреннего хранилища, путь возвращается правильно, URI выглядит так:
Uri =content://com.android.externalstorage.documents/document/primary%3Amyfile.txt
Тем не менее, afilechooser не удается, когда я выбираю файл с внешней SD-карты, и URI выглядит так:
Uri = content://com.android.externalstorage.documents/document/3935-6562%3Amyfile.txt
Итак, я смотрел код в методе afilechooser getPath, и он имеет следующее условие:
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
Теперь я вижу, что он не получает путь, потому что вместо основного он содержит "3935-6562". Теперь я могу просто написать другое условие, чтобы проверить это, но мне интересно. На этом устройстве это "3935-6562" Но на другом устройстве это все равно будут те же цифры? Если они различаются в зависимости от устройства, как я могу сделать так, чтобы он работал? Кроме того, если "3935-6562" является чем-то одинаковым на всех устройствах, как бы я получить путь к нему, так как Environment.getExternalStorageDirectory(), кажется, возвращает внутренний путь SD, а не внешний
Заранее спасибо. Я все еще изучаю этот материал, поэтому, пожалуйста, будьте как можно проще.
1 ответ
Я нашел это как решение, не уверен, что это лучший подход, хотя... Любой вклад будет оценен
if ("primary".equalsIgnoreCase(type)) {
Log.i ("PRIMARY", Environment.getExternalStorageDirectory() + "/" + split[1]);
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
else {
String sdpath=null;
if(new File("/storage/extSdCard/").exists()){
sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path",sdpath);
}
if(new File("/storage/sdcard1/").exists()){
sdpath="/storage/sdcard1/";
Log.i("Sd Card1 Path",sdpath);
}
Log.i ("EXT", sdpath + split[1]);
return sdpath + split[1];
}