2016-06-16 7 views
0
if(intent.getType().startsWith("image/")){ 
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); 
    imageView.setImageUri(imageUri); 
} 

Необходимо сохранить это изображение в своем каталоге данных приложений. Запрос на распознаватель контента возвращает путь только к тем файлам изображений, которые уже сохранены в устройстве. например,Как получить и сохранить изображение, общее с другим приложением

private String getPathFromURI(Uri contentURI) { 
     String result = null; 
     Cursor cursor = null; 
     try { 
      cursor = getContentResolver().query(contentURI, null, null, null, null); 
      cursor.moveToFirst(); 
      int idx = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA); 
      result = cursor.getString(idx); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
     return result; 
    } 

но это не работает все время, потому что некоторые из этих файлов изображений находятся в частных каталогах приложений. Что делать, чтобы получить доступ для чтения к таким файлам, чтобы копии общих файлов можно было записать/сохранить для моего приложения? что-то не так, что я должен сделать другим способом? любезно помогите, спасибо.

+0

Ха, только опечатка: Querying and Queering - это две разные вещи. Когда вы хотите что-то запросить, вы «запрашиваете» его. «Queer» означает, что что-то странно или странно и имеет другие, возможно, оскорбительные значения на современном английском языке. Извините, я не мог помочь с вашей реальной проблемой :( –

+0

: D не проблема, и спасибо за исправление меня :) –

ответ

0

Queering по содержимому распознаватель возвращает путь только те файлы изображений, которые уже сохранены в устройстве

Это гораздо хуже, чем это. Это работает только для Uri от MediaStore, и даже тогда только в определенных ситуациях.

Что делать, чтобы получить доступ для чтения к таким файлам, чтобы я мог писать их копии для своего приложения?

Шаг № 1: Использование getContentResolver().openInputStream() получить InputStream на содержание представленного Uri

Шаг № 2: Создание FileOutputStream для нужной копии

Шаг # 3: Скопируйте байты из InputStream до FileOutputStream с использованием стандартного файла Java I/O

IOW, это не сильно отличается от использования HttpURLConnection для загрузки файла с URL-адреса.

+0

okay, откроет входной поток работать все время? или будут какие-то исключительные случаи, о которых я должен позаботиться? –

+0

@AmanSharma: Ну, всегда есть багги-клиенты, поэтому вы всегда можете получить непригодный 'Uri'. И вы можете иметь доступ к контенту в течение короткого времени (пока ваш процесс запущен), поэтому вы захотите скопировать эти данные сразу. В противном случае это должно быть достаточно солидно. – CommonsWare

+0

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

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

  • Нет связанных вопросов^_^