Я хочу получить имя столбца для URI, но не получаю, какой тип URI
когда пользователь выбирает файл из файла Drive.
Используйте этот код для проверки схемы URI:
if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
// Content scheme
} else if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)){
// File scheme
} else {
// Other
}
Как преобразовать содержимое: // file-content / number uri в путь к файлу.
Создать временный файл:
@Nullable
private File createTempUploadFile(String fileName) {
File storageDir = new File(getActivity().getExternalFilesDir(null), "Upload");
if (storageDir.exists()) {
File[] files = storageDir.listFiles();
for (File file : files) {
file.delete();
}
} else {
if (!storageDir.mkdirs()) {
return null;
}
}
File file = new File(storageDir.getPath() + File.separator + fileName);
mCurrentFilePath = "file:" + file.getAbsolutePath();
return file;
}
Напишите метод util для копирования из входного потока в файл
public static boolean copyFileFromInputStream(InputStream inputStream, File dest) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(dest);
final byte[] buffer = new byte[64 * 1024]; // 64KB
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
return true;
} catch (IOException e) {
Timber.e(e);
return false;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
// Do nothing.
}
}
}
Копировать содержимое из URI во временный файл в onActivityResult
try {
File dest = createTempUploadFile(fileName);
if (dest != null) {
InputStream inputStream =
getActivity().getContentResolver().openInputStream(uri);
Utils.copyFileFromInputStream(inputStream, dest);
}
} catch (Exception e) {
// TODO
}
Теперь получите путь к файлу из временного файла.
Обновление: Если вы хотите получить имя файла из URI, используйте этот код внутри onActivityResult
.
Cursor cursor = null;
try {
cursor = getActivity().getContentResolver().query(uri,
null,
null,
null,
null);
if (cursor != null && cursor.moveToFirst()) {
int displayNameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
String fileName = cursor.getString(displayNameIndex);
}
} finally {
if (cursor != null) {
cursor.close();
}
}