Получить абсолютный путь при выборе изображения из галереи kitkat android

Поскольку я поддерживаю мое приложение в версии Kitkat, теперь в этом способе получения файла из галереи было другое.

Я предпочел, чтобы эта Android-галерея на KitKat возвращала различные Uri для Intent.ACTION_GET_CONTENT для извлечения файла из галереи и успешно работала, но мне нужен Абсолютный путь к этому файлу, я получаю

content://com.android.providers.media.documents/document/image:2505 

Для версии 19 ниже мы использовали uri different, используя то, что я получаю путь таким образом

 Cursor cursor = this.getContentResolver().query(originalUri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String fpath = cursor.getString(column_index); 

Но в версии 19 он даст мне нулевое значение, как получить абсолютный путь к файлу изображения, который был выбран пользователем.

благодаря

Solutions Collecting From Web of "Получить абсолютный путь при выборе изображения из галереи kitkat android"

Вот один из способов доступа к пути Абсолют после выбора файла.

После получения данных в новом формате URI для KK (KitKat) таким образом

 content://com.android.providers.media.documents/document/image:2505 

Просто извлеките ID своего документа

 if(requestCode == GALLERY_KITKAT_INTENT_CALLED && resultCode == RESULT_OK){ Uri originalUri = data.getData(); final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // Check for the freshest data. getContentResolver().takePersistableUriPermission(originalUri, takeFlags); /* now extract ID from Uri path using getLastPathSegment() and then split with ":" then call get Uri to for Internal storage or External storage for media I have used getUri() */ String id = originalUri.getLastPathSegment().split(":")[1]; final String[] imageColumns = {MediaStore.Images.Media.DATA }; final String imageOrderBy = null; Uri uri = getUri(); String selectedImagePath = "path"; Cursor imageCursor = managedQuery(uri, imageColumns, MediaStore.Images.Media._ID + "="+id, null, imageOrderBy); if (imageCursor.moveToFirst()) { selectedImagePath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); } Log.e("path",selectedImagePath ); // use selectedImagePath }else if() { // for older version use existing code here } // By using this method get the Uri of Internal/External Storage for Media private Uri getUri() { String state = Environment.getExternalStorageState(); if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) return MediaStore.Images.Media.INTERNAL_CONTENT_URI; return MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } 

Решение Пратика очень помогло мне. Ниже приведена версия, которая работает для меня в Kitkat 4.4.2. Три вещи, которые я изменил, – это
1) Использование преобразователя контента для получения пути
2) originalUri.getLastPathSegment (). Split (":") [1] дает мне индекс из привязки, поэтому я использую индекс 0. Вместо этого он работает
3) Удалены флажки и проверяются самые свежие данные, поскольку мы фильтруем курсор с идентификатором.

 try { Uri originalUri = data.getData(); String pathsegment[] = originalUri.getLastPathSegment().split(":"); String id = pathsegment[0]; final String[] imageColumns = { MediaStore.Images.Media.DATA }; final String imageOrderBy = null; Uri uri = getUri(); Cursor imageCursor = activity.getContentResolver().query(uri, imageColumns, MediaStore.Images.Media._ID + "=" + id, null, null); if (imageCursor.moveToFirst()) { value = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); } } catch (Exception e) { Toast.makeText(activity, "Failed to get image", Toast.LENGTH_LONG).show(); } 
 Bitmap bitmap = MediaStore.Images.Media .getBitmap(getActivity().getContentResolver(), uri); 

Надеюсь, это вам поможет.