Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
#1

Как из data.getData() получить путь к файлу? - Android

29.07.2016, 16:17. Просмотров 363. Ответов 4
Метки нет (Все метки)

Добрый вечер!
Столкнулся с необходимость открыть изображение из галереи устройства.
С этой целью использовал:
1) Доступ к галереи через:
Java
1
2
3
Intent sdIntent = new Intent(Intent.ACTION_GET_CONTENT);
sdIntent.setType("image/*");
startActivityForResult(sdIntent, SD_CAPTURE);
2) Передача изображения в ImageView:
Java
1
2
3
4
5
6
7
8
     Uri fileUri = data.getData();
     try {
          final InputStream imageStream = getContentResolver().openInputStream(fileUri);
          final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
          alarmImg.setImageBitmap(selectedImage);
     } catch (FileNotFoundException e) {
          e.printStackTrace();
     }
Хочу сохранить путь к картинке в бд и открывать его по умолчанию при запуске приложения(в другой активности).
Для открытия картинки думаю использовать что-то типа:
Java
1
2
3
4
5
6
7
8
9
10
     File fileSd = new File(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_IMG_PATH)));
     Uri fileUriSd = Uri.fromFile(fileSd);
     try {
               final InputStream imageStream = getContentResolver().openInputStream(fileUriSd);
               final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
               imageView.setImageBitmap(selectedImage);
     } catch (FileNotFoundException e) {
          e.printStackTrace();
          imageView.setImageResource(R.drawable.no_image);
     }
Подскажите пожалуйста, как из данных возвращаемых интентом получить путь к картинке, либо сохранить путь к картинке и открыть ее другим способом?
Пробовал использовать:
- fileUri.getPath(), возвращает /document/image:143
- fileUri.getEncodedPath() - /document/image%3A143
- imageStream.toString() - android.os.ParcelFileDescriptor$AutoCloseInputStream@173394d9
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2016, 16:17     Как из data.getData() получить путь к файлу?
Посмотрите здесь:

Android Путь к файлу и графические ресурсы
Android У нас был eclipse ,windows 8 x64 и куча фигни [ Filed to load the JNI shared libray "путь к файлу"]
Data Backup -как получить адрес файла стандартных настроек Android
Android Как получить путь к SD карте на ЛЮБОМ устройстве?
Android Получить путь к карте памяти (SD card)
Android Не получается получить путь к карте памяти
Получить абсолютный путь к Assets файлам Android
Как получить путь к папке, в которой находится приложение? Android
Android Как получить доступ к root файлу
Android Узнать абсолютный путь к файлу
Работа с txt файлами в Android. Путь к файлу Android
Android Получить список файлов сервера указав путь

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
petruchodd
89 / 89 / 8
Регистрация: 23.06.2009
Сообщений: 507
29.07.2016, 17:46     Как из data.getData() получить путь к файлу? #2
что то типа такого люди исползуют
Java
1
2
3
4
5
6
7
8
9
10
private String getPath(Uri contentURI) {
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) {
        return contentURI.getPath();
    } else { 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        return cursor.getString(idx); 
    }
}
Java
1
2
Uri selectedImageURI = data.getData();
imageFile = new File(getPath(selectedImageURI));
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
30.07.2016, 22:42  [ТС]     Как из data.getData() получить путь к файлу? #3
petruchodd, спасибо за ответ!
Только функция getPath(Uri contentURI) у меня вылетает с ошибкой E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns.
REALIST07
Автор FAQ
Автор FAQ
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
30.07.2016, 23:20     Как из data.getData() получить путь к файлу? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Держи, и никому не давай
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  /*
   * Gets the file path of the given Uri.
   */
    @SuppressLint("NewApi")
    public static  String getPath(Uri uri, Context context) throws URISyntaxException {
        final boolean needToCheckUri = Build.VERSION.SDK_INT >= 19;
        String selection = null;
        String[] selectionArgs = null;
        // Uri is different in versions after KITKAT (Android 4.4), we need to
        // deal with different Uris.
        if (needToCheckUri && DocumentsContract.isDocumentUri(context, uri)) {
            if (isExternalStorageDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            } else if (isDownloadsDocument(uri)) {
                final String id = DocumentsContract.getDocumentId(uri);
                uri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
            } else if (isMediaDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];
                if ("image".equals(type)) {
                    uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                selection = "_id=?";
                selectionArgs = new String[] {
                        split[1]
                };
            }
        }
        if ("content".equalsIgnoreCase(uri.getScheme())) {
            String[] projection = {
                    MediaStore.Images.Media.DATA
            };
            Cursor cursor = null;
            try {
                cursor = context.getContentResolver()
                        .query(uri, projection, selection, selectionArgs, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                if (cursor.moveToFirst()) {
                    return cursor.getString(column_index);
                }
            } catch (Exception e) {
            }
        } else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }
        return null;
    }
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
30.07.2016, 23:22  [ТС]     Как из data.getData() получить путь к файлу? #5
Нашел метод схожий с приведенным petruchodd, только с небольшой разницей для API младших 11, от 11 до 18 и отдельно для 19. Если кому нужно - ссылка

Добавлено через 1 минуту
REALIST07, спасибо!
Yandex
Объявления
30.07.2016, 23:22     Как из data.getData() получить путь к файлу?
Ответ Создать тему
Опции темы

Текущее время: 07:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru