Я использую это намерение открыть Chooser, чтобы забрать файл:Правильный способ выбрать файл для открытого
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.parse(getExternalFilesDir(null).toString()), "*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Intent chooser = Intent.createChooser(intent, "Choose File");
startActivityForResult(chooser, FILE_SELECT);
Я не до конца понимает, но это работает. Я скопировал его из какого-то, например, в сети
Результат является Ури, но я считаю обработку Ури, также скопированный из примера, слишком громоздкой
if(uri != null) {
if("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = {"_data"};
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if(cursor.moveToFirst()) {
return cursor.getString(column_index);
}
}
catch (Exception e) {}
} else if("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
}
Это самый простой способ, чтобы позволить пользователь выбирает файл и получает его путь?
Почему мне нужно проверить, является ли uri «содержанием»? Я просто хочу открыть текстовый или заархивированный файл, который пользователь выбрал в намерении.
Могу ли я игнорировать проверку содержания, просто предположим «файл» и просто используйте uri.getPath()
?
Редактировать I: Есть ли способ принудительно выбирать с помощью схемы uri «файл»?
Очень важно. имел тот же вопрос. И хотя я все еще на тему, я действительно не могу понять, в чем причина «return cursor.getString (column_index);» ??? – user3833732