Я озадачен двумя версиями uri, указывающими на один и тот же файл изображения.
URI, который я получаю из data.getData()
для данных о намерениях, прекрасно работает с Picasso.Отладчик идентифицировал его как {Uri$HierarchicalUri @5962}
, но когда я попытался использовать MediaStore
для получения URI из Media.DATA
, я получил другой URI, который не работает с Пикассо.Отладчик идентифицировал его как {Uri$StringUri@6079}
.
Как извлечь HierarchicalUri
из MediaStore.Images.Media.EXTERNAL_CONTENT_URI
?
Ниже приведен мой код:
private void openFileChooser() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PICK_IMAGE_REQUEST);
}//openFileChooser
public Uri getImageUriTest() {
ContentResolver contentResolver = getContentResolver();
Uri mediastoreUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Uri resultUri = null;
Cursor imageCursor = contentResolver.
query(mediastoreUri, null, null, null, null);
imageCursor.moveToFirst();
int indexImageAbsolutePath = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);
String absolutePath = imageCursor.getString(indexImageAbsolutePath);
resultUri = MediaStore.Images.Media.getContentUri(absolutePath);
return resultUri;
}//getImageTestUri()
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null) {
imageUri = data.getData();
imageUriTest = getImageUriTest();
Picasso.get().load(imageUri).into(imageView);
}
}//OnActivityResult