Мое приложение для Android открывает изображения и манипулирует ими.Моя активность запрашивает открытие изображения следующим образом:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"),
PICK_FROM_FILE);
При этом он запускает диалоговое окно с тремя-четырьмя параметрами, такими как ES File Explorer: Файлы, Галерея и т. Д.
Я хочу прочитать это как растровое изображение, используя BitmapFactory.decodeFile(path)
.
Когда я выбираю файл из ES File Explorer, путь вычисляется следующим образом:
String path = imageData.getData().getPath();
Однако этоне работает выбор изображения из галереи или файлов, где значение пути, например, /external/images/media/38
.
Поэтому я поставил галочку, чтобы преобразовать такой путь, который начинается с external используя:
if (path.startsWith("/external")) {
path = getFilePathFromUri(imageData.getData());
}
private String getFilePathFromUri(Uri uri) {
Cursor cursor = managedQuery(uri,
new String[] { MediaStore.Images.Media.DATA },
null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Это преобразует вышеуказанный путь в /mnt/sdcard/dcim/Camera/2011-11-13_15-33-24_304.jpg
, и теперь это работает для BitmapFactory.decodeFile(path)
.
Я понимаю, что жесткое кодирование такой проверки (/ external) нехорошая идея, есть ли лучший, возможно, общий способ разрешения формата URI, возвращаемого в Intent?