URI / URL Пути из галереи и фотографии, сделанные камерой, отличаются - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь заставить пользователей выбирать между фотосъемкой с помощью камеры по умолчанию для устройства и выбирать из галереи изображений также по умолчанию для устройства.

Я могу заставить камеру делать снимки ион будет отображаться в приложении просто отлично, так как кажется, что URI идет прямо к файлу JPG.Однако путь, указанный для URI галереи, очень отличается и не отображает изображение вообще.

Вот пути, которые я получаю:

КОГДА СДЕЛАНО ИЗ КАМЕРЫ : /mnt/sdcard/filename.jpg

КОГДА ВЫБРАЛИ ИЗ ГАЛЕРЕИ : / external / images / media / # (# - это идентификационный номер / миниатюра, которую я считаю)

Код, используемый для получения обоих путей:

КАМЕРА :

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            mImageCaptureUri = 
            Uri.fromFile(new file(Environment.getExternalStorageDirectory(),
            "fname_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

ГАЛЕРЕЯ :

   Intent intent = new Intent();
   intent.setType("image/*");
   intent.setAction(Intent.ACTION_GET_CONTENT);
   startActivityForResult(Intent.createChooser(intent, 
           "Complete action using"), PICK_FROM_FILE);
   intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

С Галереей она открывается, и я могу хорошо просматривать, она просто не отображает изображение, как при съемке.

Код, используемый для добавления изображений в мое приложение после выбора / съемки,:

   ImageView getMyphoto = (ImageView) findViewById(R.id.usePhoto);
   String stringUrl = prefSettings.getString("myPic", "");
   Uri getIMG = Uri.parse(stringUrl);
   getMyphoto.setImageURI(null);
   getMyphoto.setImageURI(getIMG);

1 Ответ

2 голосов
/ 07 сентября 2011

Проверьте наличие "/ external" в строке uri и затем используйте метод get правильный путь, чтобы получить абсолютный путь.

 private String getRealPathFromURI(Uri contentUri) {
        int columnIndex = 0;

        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);

        try {
            columnIndex = cursor.getColumnIndexOrThrow
                           (MediaStore.Images.Media.DATA);
        } catch (Exception e) {
            Toast.makeText(ImageEditor.this, "Exception in getRealPathFromURI",
                           Toast.LENGTH_SHORT).show();
            finish();  
            return null;
        }       
        cursor.moveToFirst();
        return cursor.getString(columnIndex);               
    }
...