Получить путь и имя файла из результата намерения камеры - PullRequest
17 голосов
/ 03 октября 2011

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

Я пытаюсь сделать это с помощью следующего кода:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);

С этим кодом открывается камера, и после того, как у меня естьСделав один снимок, он закрывает его и сохраняет в папку изображений по умолчанию (обычно это / dcim / camera или sdcard / dcim / camera ...)

, но как теперь узнать путь и имя файла снятого снимка??Я пробовал почти все в onActivityResult Я пробовал

String result = data.getData();

и

String result = data.getDataString();

и

String result = data.toURI();

и

Uri uri = data.getData();

и т.д.

Я исследовал последние два дня, чтобы найти решение для этого, есть много статей в Интернете и по stackoverflow, но ничего не работает.Мне не нужна миниатюра, мне нужен только путь (uri?) К изображению, которое сняла камера.

Спасибо за любую помощь

РЕДАКТИРОВАТЬ: Когда я пытаюсь:

path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE); 

он не сохраняет изображение как test.jpg, но с обычным именем изображения 2011-10-03 ..... jpg (но это тоже нормально, мне нужен только путь к изображению, не имеет значения, как зовут).

С наилучшими пожеланиями

РЕДАКТИРОВАТЬ снова

path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE); 

Когда я пытаюсь это, он сохраняетизображение в нужную папку и с заданным именем (например, test111111.jpg).Но как мне теперь получить путь к файлу в onActivityResult?

Ответы [ 3 ]

6 голосов
/ 30 января 2012

Изображение будет сохранено дважды, сначала в папке галереи, а затем в файле, который вы указали для метода putExtra (MediaStore.EXTRA_OUTPUT, path).

Вы можете получить последний снимок, сделанный следующим образом:

/**
 * Gets the last image id from the media store
 * @return
 */
private int getLastImageId(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        Log.d(TAG, "getLastImageId::id " + id);
        Log.d(TAG, "getLastImageId::path " + fullPath);
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}

Этот образец был основан на сообщении: Удаление изображения галереи после намеренной фотографии, сделанной камерой

1 голос
/ 04 декабря 2013

вы можете использовать как это в onActivityResult ()

if(requestCode==CAMERA_CAPTURE)
    {

        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
        if(cursor != null && cursor.moveToFirst())
        {
            do 
            {
                String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
               Uri selectedImage = Uri.parse(picturePath);

            }
            while(cursor.moveToNext());
                cursor.close();
            File out = new File(picturePath);
            try 
            {
                mOriginal = decodeFile(out);
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            mSelected.setImageBitmap(mOriginal);
        }
    }
0 голосов
/ 03 октября 2011

Когда вы запускаете ACTION_IMAGE_CAPTURE, вы можете передать дополнительные MediaStore.EXTRA_OUTPUT как URI файла, в котором вы хотите сохранить изображение.

Вотпростой пример:

   File file = new File(path);
   Uri outputFileUri = Uri.fromFile(file);

   Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

   startActivityForResult(intent, TAKE_PICTURE); 

РЕДАКТИРОВАТЬ: Я только что попробовал на моем устройстве и file.createNewFile() решил проблему для меня.

...