Ответ 1
На данный момент я получил это для получения изображения из галереи. Я тестировал его на 4.4, 5.0.1 и 5.1.1, но он должен работать и с предыдущими версиями (с новым и старым приложением Google для фото), должен быть менее взломанным и не требует проверки версии Android.
public static Uri handleImageUri(Uri uri) {
if (uri.getPath().contains("content")) {
Pattern pattern = Pattern.compile("(content://media/.*\\d)");
Matcher matcher = pattern.matcher(uri.getPath());
if (matcher.find())
return Uri.parse(matcher.group(1));
else
throw new IllegalArgumentException("Cannot handle this URI");
}
return uri;
}
И с этим я использовал тот же самый код, который я когда-либо использовал для получения пути к изображению:
public static String getRealPathFromURI(Context context, Uri uri) {
Cursor cursor = null;
try {
Uri newUri = handleImageUri(uri);
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(newUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} catch (Exception e){
return null;
} finally {
if (cursor != null) {
cursor.close();
}
}
}