У меня есть приложение, которым я делюсь изображениями из галереи.
Когда я делюсь одним изображением, я получил этот код:
imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
filePath = null;
if (imageUri != null && "content".equals(imageUri.getScheme())) {
Cursor cursor = this.getContentResolver().query(imageUri, new String[]{android.provider.MediaStore.Images.ImageColumns.DATA}, null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(0);
cursor.close();
} else {
filePath = imageUri.getPath();
}
}
чтобы преобразовать их из чего-то типа "external / images / media / 3000" в фактический путь к файлу.
При совместном использовании нескольких изображений в приложении вместо одного URI Intent.EXTRA_STREAM
представляет собой массив URI, поэтому для их разделения я беру весь массив в виде одной строки, разделяя его на массив String различных URI, а затем для каждой ячейки я делаю URI.parse()
и пытаюсь повторить процесс, выполненный для одного URI.
Это не работает, и когда я попытался выяснить, почему я обнаружил, что тип единственного URI (через imageUri.getClass().getName()
) равен android.net.uri$HierarchicalUri
, а несколько строк, которые я анализирую как URI, равны android.net.uri$StringUri
.
Я до сих пор не могу найти объяснение того, в чем разница, или как преобразовать одно в другое, или есть ли лучший способ сделать это.