Получить путь и имя файла из результата намерения камеры
Я хочу сделать снимок с намерением камеры и сохранить его в папке 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?) К изображению, которое сделала камера.
Спасибо за любую помощь
EDIT:
Когда я пытаюсь:
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 (но это тоже нормально, мне нужен только путь к изображению, это не имеет значения какое имя).
С наилучшими пожеланиями
EDIT Again
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?
Ответы
Ответ 1
Изображение будет сохранено дважды, сначала в папке галереи, а затем в файле, указанном в методе putExtra (MediaStore.EXTRA_OUTPUT, путь).
Вы можете получить последнее сделанное изображение:
/**
* 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;
}
}
Этот образец был основан на сообщении: Удаление изображения галереи после снятия снимка камеры
Ответ 2
Когда вы начинаете 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);
EDIT: Я только что попробовал на своем устройстве и file.createNewFile()
решил проблему для меня.
Ответ 3
вы можете использовать это в 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);
}
}