Ottenere il percorso di immagine da ACTION_IMAGE_CAPTURE Intent
-
10-10-2019 - |
Domanda
Ciao Sto usando ACTION_IMAGE_CAPTURE
per catturare un'immagine utilizzando Intent
come segue:
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);
Ho bisogno immagine negozio per in uno sdcard e recuperare il percorso di tale immagine utilizzando il metodo onActivityResult
. Non so come ottenere il percorso dell'immagine dell'immagine attualmente catturata.
Se qualcuno sa aiuto per favore.
Grazie
Soluzione
Questo è come funziona il 2.2 (diverso rispetto alle versioni precedenti). Quando si avvia intento
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);
è necessario ricordare mCapturedImageURI
.
Quando si cattura un'immagine, in uso onActivityResult()
che URI per ottenere il percorso del file:
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);
UPDATE: On nuovi dispositivi Android non avrebbe bisogno MediaStore.EXTRA_OUTPUT, ma è un'immagine piuttosto dedurre / video URI da data.getData () ricevuta da onActivityResult (..., i dati Intent), come ben descritto in
Android ACTION_IMAGE_CAPTURE Intent
Tuttavia, poiché questa parte è soggetta a produttore adattamento, possono verificarsi altri telefoni in cui l'approccio "vecchio" può essere utile.
Altri suggerimenti
Un altro modo, testato su Android 2.1, è prendere l'ID o AbsolutePath dell'ultima immagine galleria.
Si può fare così:
/**
* 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;
}
}
E per rimuovere il file:
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) } );
}
Questo codice si è basata sul palo: Eliminazione di una galleria immagine dopo fotocamera intento preso
Questa domanda è molto vecchio, ma sono stato in lotta con lo stesso problema per mezza giornata. Il problema è che il vostro intento ACTION_IMAGE_CAPTURE
tornerà sempre code=-1
e data=null
se non si imposta le seguenti autorizzazioni per l'applicazione nel file AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA"/>
È anche possibile impostare le seguenti operazioni se si desidera registrare l'audio dalla vostra applicazione:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
Rimuovi
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
e add
Uri uri = data.getData();in onActivityResult