Я хочу выбрать файл, который существует в sdcard не во внутреннем хранилище, и загрузить его на сервер, но я не могу получить его путь для получения его размера. У меня есть намерение выбрать файл, используя следующий код:
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"application/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(
Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);
Для получения пути к файлу я использую этот ответ и его работу, если пользователь не выберет любой файл с SD-карты (съемный). Когда я отлаживаю код и обнаружил, что тип не первичный, поэтому он не будет входить в это условие:
if("primary".equalsIgnoreCase(type)){
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
Итак, мой вопрос в том, что будет дальше? то есть, если тип не является первичным? как мы можем получить путь к файлу в этом случае? У меня есть много вопросов и учебников, в которых нет никого. Я также попробовал еще часть этого ответа, но его не работает, потому что System.getenv()
возвращает null для " SECONDARY_STORAGE" и sdcard для " EXTERNAL_STORAGE". При попытке получить исключение файла не найден:
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}else{
return System.getenv("EXTERNAL_STORAGE") + "/" + split[1];
}
Uri и doc Id для файла выглядят следующим образом:
Uri: content://com.android.externalstorage.documents/document/0EF9-3110%3Adevice-2016-12-02-130553.png
docId: 0EF9-3110: device-2016-12-02-130553.png
Любая помощь?