Как получить правильный иерархический URI с помощью MediaStore EXTERNAL_CONTENT_URI - PullRequest
0 голосов
/ 02 декабря 2018

Я озадачен двумя версиями 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
...