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];
}
Другие вопросы по тегам