Intereting Posts

Получить путь изображения от ACTION_IMAGE_CAPTURE Intent

Привет, я использую ACTION_IMAGE_CAPTURE для захвата изображения с использованием Intent следующим образом:

 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()) + ".jpg")) ); startActivityForResult(cameraIntent, 0); 

Мне нужно сохранить изображение на SD-карте и получить путь к этому изображению с onActivityResult метода onActivityResult . Я не знаю, как получить путь к изображению текущего захваченного изображения.

Если кто-нибудь знает, пожалуйста, помогите.

благодаря

Solutions Collecting From Web of "Получить путь изображения от ACTION_IMAGE_CAPTURE Intent"

Вот как это работает на 2.2 (отличается от предыдущих версий). При запуске

  String fileName = "temp.jpg"; ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); startActivityForResult(intent, CAPTURE_PICTURE_INTENT); 

Вам нужно запомнить mCapturedImageURI .

Когда вы onActivityResult() изображение, в onActivityResult() используйте этот URI для получения пути к файлу:

  String[] projection = { MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String capturedImageFilePath = cursor.getString(column_index_data); 

ОБНОВЛЕНИЕ: на новых устройствах Android вам не понадобится MediaStore.EXTRA_OUTPUT, но вы скорее выведете URI изображения / видео из data.getData (), полученные из onActivityResult (…, данные Intent), как хорошо описано в

Android ACTION_IMAGE_CAPTURE Intent

Однако, поскольку эта часть зависит от адаптации производителя, вы все равно можете столкнуться с телефонами, где «старый» подход может быть полезен.

Другой способ, протестированный на Android 2.1, – взять идентификатор или AbsolutePath последнего изображения галереи.

Это можно сделать так:

 /** * 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; } } 

И удалить файл:

 private void removeImage(int id) { ContentResolver cr = getContentResolver(); cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) } ); } 

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

Этот вопрос очень старый, но я боролся с той же проблемой в течение полудня. Проблема заключается в том, что ваш ACTION_IMAGE_CAPTURE намерение всегда будет возвращать code=-1 и data=null если вы не установили следующие разрешения для приложения в вашем файле AndroidManifest.xml :

 <uses-permission android:name="android.permission.CAMERA"/> 

Вы также можете установить следующее, если вы хотите записать звук из своего приложения:

 <uses-permission android:name="android.permission.RECORD_AUDIO"/> 

Удалить

 intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

и добавить

 Uri uri = data.getData();in onActivityResult