2016-02-03 4 views
1

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

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent result) { 
    if (requestCode == Crop.REQUEST_PICK && resultCode == RESULT_OK) { 
     Uri uri = result.getData(); 
     beginCrop(uri); 
    } else if (requestCode == Crop.REQUEST_CROP) { 
     handleCrop(resultCode, result); 
    } 
} 

Формат Ури извлекаться выше содержание: // средства массовой информации/внешние/изображения/СМИ/7266

Однако я не смог загрузить Ури в этом формате, когда я пытаюсь принести Uri образа Я просто сохранить в виде файла:

Date d = new Date(); 
      CharSequence s = DateFormat.format("MM-dd-yy hh-mm-ss", d.getTime()); 
      Bitmap bitmap = drawView.getResultBitmap(); 
      File sdCardDirectory = Environment.getExternalStorageDirectory(); 
      File image = new File(sdCardDirectory, "DCIM/Camera/" + s.toString() + ".png"); 
      boolean success = false; 

      // Encode the file as a PNG image. 
      FileOutputStream outStream; 
      try { 

       outStream = new FileOutputStream(image); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
        /* 100 to keep full quality of the image */ 

       outStream.flush(); 
       outStream.close(); 
       success = true; 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      if (success) { 
       MediaScannerConnection.scanFile(getActivity(), new String[]{ 
           image.getAbsolutePath()}, 
         null, new MediaScannerConnection.OnScanCompletedListener() { 
          public void onScanCompleted(String path, Uri uri) { 


          } 
         }); 

       Uri uri = Uri.parse(image.getAbsolutePath()); 
       beginCrop(uri); 

Ури, полученный из выше кода /хранение/эмулировать/0/DCIM/Camera/02-04-16 12-49-16.png

Я считаю, что это не правильный формат Uri, а не просто абсолютный путь к файлу. Есть ли выход, с помощью которого я могу получить Uri в формате : // media/external/images/media/?

Любая помощь очень ценится

ответ

1

Я считаю, что это не правильный формат Uri, а не только абсолютный путь к файлу.

Вы верны. Используйте Uri.fromFile() для преобразования File в файл Uri, указывающий на файл.

Есть ли выход, с помощью которого я могу получить Uri в формате контента: // media/external/images/media /?

Нелегко. В лучшем случае, в onScanCompleted(), вы можете запустить некоторый запрос, чтобы получить Uri, который использует MediaStore. Но до тех пор MediaStore не знает о файле.

Uri, что вы получаете от Uri.fromFile() является действительным Uri, но она будет иметь file схему, а не content схему.

+0

Спасибо, CommonsWare за правильное руководство. – user264953

-1

вы можете получить из URI Bitmap, как это:

Uri getUri(Context context, Bitmap bitmap) { 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     String path = ""; 
     try { 

      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      path = MediaStore.Images.Media.insertImage(
       context.getContentResolver(), bitmap, "Title", null); 
    } catch (Exception e) { 

    } 
    return Uri.parse(path); 
} 
+0

Это не отвечает на вопрос. – CommonsWare

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