Приложение для Android открывает изображения и делает манипуляции с ними. Моя активность запрашивает изображение, чтобы открыть следующим образом:Устранение URI из разных источников в 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
например.
Так что я положил чек, чтобы преобразовать такой путь, который начинается с внешнего с помощью:
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?
Намерение ImageData = намерения; – Tanager4