2017-02-22 4 views
-1

Я использую этот метод, чтобы получить путь к файлу из URI:Ошибка получения пути изображения из папки Download Android

public String getPath(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    String document_id = cursor.getString(0); 
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1); 
    cursor.close(); 

    cursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null); 
    cursor.moveToFirst(); 
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
    cursor.close(); 

    return path; 
} 

Если я пытаюсь получить путь к файлу из файла образа из галереи отлично работает. Но, когда я пытаюсь получить файл пути из файла изображения из папки «Загрузить», он не работает. Какие-либо предложения. Заранее большое спасибо.

ответ

2

Я использую этот метод, чтобы получить путь к файлу от Uri

Это не будет работать.

Если я пытаюсь получить путь к файлу из файла образа из галереи отлично работает

Не на всех устройствах и не для всех изображений.

Любые предложения

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

Ни одна из этих вещей не является истинной.

Если схема с Uri случается file, тогдаgetPath() будет путь файловой системы, указывающий на файл, который (предположительно) вы можете получить доступ.

Если схема content, то Uri может указывать на ничего:

  • файл на внешнем накопителе, который вы могли бы получить доступ к
  • в файл на съемном носителе, который вы не можете получить доступ к
  • Файл на внутренней памяти другого приложения, к которому вы не можете получить доступ
  • Актив другого приложения, которое не является файлом
  • значение из BLOB столбца базы данных, которая не является файлом
  • Значение, которое генерируется на лету, так что эта веб-страница, которая не является файлом
  • Контент, который будет транслироваться из Интернет, который не является файлом на устройстве
  • и так далее

Использование ContentResolver и openInputStream() (и, возможно, openOutputStream()) для работы с контентом, идентифицированного Uri.

+0

Hi CommonsWare. Большое вам спасибо за ваш действительно хороший ответ. После выбора изображения, Uri возвращается обратно правильно. Но когда я пытаюсь получить фактический путь этого изображения в папке donwload, он сработает. Проблема, похоже, связана именно с этой конкретной папкой. Я не знаю, как управлять с ContentResolver или openInputStream(). Итак, как я могу получить фактическое местоположение в этой папке? – agustincola

+0

@ agustincola: «Как я могу получить фактическое местоположение в этой папке?» - Нет. Вы используете 'Uri' для доступа к потокам, связанным с контентом, используя' ContentResolver'. Это должно быть описано в вашей книге разработчика Android или курсе. Это также описано в [документации] (https://developer.android.com/training/secure-file-sharing/request-file.html). – CommonsWare

+0

Хорошо. Спасибо за ваше время. – agustincola

-1

Возможно, я не спрашивал должным образом о моем английском. После изучения нескольких вариантов, наконец, я основал хорошее решение, которое работает для меня. Я принудительно открываю изображение галереи, и пользователь не может в любой момент загрузить из папки Donwload.Я делаю следующий в методе showFileChooser:

private void showFileChooser() { 
    if (Build.VERSION.SDK_INT <19){ 
     Intent intent = new Intent(); 
     intent.setType("image/jpeg"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)),PICK_IMAGE_REQUEST); 
    } else { 
     Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, PICK_IMAGE_REQUEST); 
    } 

Надеюсь, это будет полезно для кого-то в будущем.

Смежные вопросы