Get filepath and filename of selected gallery image in Android
Получить путь к файлу и имя файла выбранного изображения галереи в Android
Я создаю приложение, которое загружает выбранное изображение из галереи и загружает его в веб-сервис. Веб-сервису требуется имя файла выбранного изображения плюс кодировка base64 содержимого файла. Мне удалось добиться этого с помощью жестко заданного пути к файлу. Однако я изо всех сил пытаюсь получить реальный путь к файлу изображения. Я прочитал в Интернете и у меня есть этот код, но у меня он не работает:
publicvoidonActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { UriselectedImageUri= data.getData(); String[] projection = {MediaStore.Images.Media.DATA};
private String getRealPathFromURI(Uri contentURI) { Cursorcursor= getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path return contentURI.getPath(); } else { cursor.moveToFirst(); intidx= cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); return cursor.getString(idx); } }
Ответ 4
publicclassRealFilePath { /** * Get a file path from a Uri. This will get the the path for Storage Access * Framework Documents, as well as the _data field for the MediaStore and * other file-based ContentProviders. * * @param context The context. * @param uri The Uri to query */ publicstatic String getPath(final Context context, final Uri uri) {
/** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris, and other file-based ContentProviders. * * @param context The context. * @param uri The Uri to query. * @param selection (Optional) Filter used in the query. * @param selectionArgs (Optional) Selection arguments used in the query. * @return The value of the _data column, which is typically a file path. */ publicstatic String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursorcursor=null; finalStringcolumn="_data"; final String[] projection = { column };
/** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ publicstaticbooleanisExternalStorageDocument(Uri uri) { return"com.android.externalstorage.documents".equals(uri.getAuthority()); }
/** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */ publicstaticbooleanisDownloadsDocument(Uri uri) { return"com.android.providers.downloads.documents".equals(uri.getAuthority()); }
/** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */ publicstaticbooleanisMediaDocument(Uri uri) { return"com.android.providers.media.documents".equals(uri.getAuthority()); }
/** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */ publicstaticbooleanisGooglePhotosUri(Uri uri) { return"com.google.android.apps.photos.content".equals(uri.getAuthority()); } }