2012-11-15 22 views
8

Vorrei acquisire un'immagine dalla fotocamera e salvarla nella directory della cache dell'app privata. Mi rendo conto che devo autorizzare la app della fotocamera a scrivere nella mia directory privata, quindi ho aggiunto il flag FLAG_GRANT_WRITE_URI_PERMISSION.Memorizza l'immagine dalla videocamera nella directory della cache dell'app privata

Quello che succede è che l'app fotocamera si apre, posso scattare la foto, ma quando clicco sul pulsante OK, non succede nulla. L'app fotocamera resta aperta. Nessun output di registro. Immagino sia a causa di un problema di autorizzazione.

private void getCameraImage() { 
    try { 
     mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir()); 
     Uri imgUri = Uri.fromFile(mTmpFile); 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     // i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception 
     startActivityForResult(i, REQUEST_CAMERA); 
    } catch (IOException e) { 
     Log.e(TAG, "getCameraImage()", e); 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
    } 
} 

Qualche intuizione, su come ho potuto correggerlo?

Edit:

Quando cambio la directory sulla scheda SD pubblico, allora funziona benissimo.

mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory()); 

Grazie Simon

+1

Se si tratta di un problema di autorizzazione, nel LogCat viene visualizzato un errore. – PearsonArtPhoto

+0

Non ne sono sicuro. Anche quando rimuovo il flag FLAG_GRANT_WRITE_URI_PERMISSION, non ottengo alcun output di registro. Forse l'app della fotocamera controlla l'autorizzazione e interrompe l'azione solo se non riesce a scrivere il file. – SimonSays

risposta

2

Invece di passare l'Uri per memorizzare l'immagine è possibile utilizzare http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera. PictureCallback)

e ottenere il contenuto nella memoria dell'app. Da lì sarai in grado di fare tutto ciò che vuoi.

Non dimenticare che le applicazioni della fotocamera utilizzano anche la galleria e l'app della galleria non è autorizzata a controllare la tua directory privata.

+0

Bene, questo è un modo molto diverso di ottenere l'immagine rispetto a quello che intendevo. In realtà non è una risposta alla domanda originale, ma potrebbe ancora risolvere il problema. Poiché non sto più lavorando su quell'app e quindi non posso testare la soluzione, andrò avanti e accetterò la risposta - è l'unica comunque :-) – SimonSays

+0

Grazie mille per l'apprezzamento e sì non è un diretto rispondi alla tua domanda ma come hai detto è l'unica possibilità di fare qualcosa che "appartiene" solo alla tua app e non a nessun altro che usa i media. Ho usato questo metodo da solo ... Grazie – danysz

+0

Questa soluzione è stata deprecata in API 21 –

Problemi correlati