2011-09-01 11 views
18

Sto chiamando la fotocamera predefinita dalla mia attività e quindi gestendo il onActivityResult. Il mio codice sembra funzionare bene su LG Ally che non ha una conferma quando viene scattata una foto. Tuttavia, quando eseguo la stessa app sul Nexus S, mi viene richiesto "Ok", "Retake" o "Annulla" prima di tornare alla mia attività. Mentre "Annulla" funziona, tornando alla mia attività senza salvare l'immagine, "Ok" non sembra avere alcun effetto, nemmeno tornare alla mia attività.Attività fotocamera predefinita non finita Su OK pulsante premere

mio codice qui sotto:

private void captureImage() { 

    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + (new UserContextAdapter(this)).getUser() + "/"); 
     path.mkdirs(); 
     File file = new File(path, "Image_Story_" + mRowId.toString() + ".jpg"); 

     newImageUri = Uri.fromFile(file); 

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

     startActivityForResult(intent, CAPTURE_IMAGE); 
    } 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    switch (requestCode) { 
    case CAPTURE_IMAGE: 
     switch (resultCode) { 
     case 0: 
      Log.i("CAPTURE", "Cancelled by User"); 
      break; 
     case -1: 
      mImageUri = newImageUri; 
      setImageFromUri(); 
      } 
    } 
+0

assicurati di aver concesso l'autorizzazione allo stoccaggio –

risposta

15

penso che ho appena avuto lo stesso identico problema.

Se il percorso per salvare l'immagine non è corretto, la fotocamera non tornerà alla tua app. Una volta verificato che la directory esista, tutto ha funzionato correttamente. Assicurati che la directory esista, quindi dovrebbe funzionare.

- Modifica -

ho appena visto, che si chiama path.mkdirs(); ma penso che non funziona. Come puoi leggere nel documento di Android "Notare che questo metodo non genera IOException in caso di errore, i chiamanti devono controllare il valore restituito.". Assicurati di controllare se la directory esiste davvero.

hth

+0

hmm, questo è stato tanto tempo fa non ricordo in realtà come ho risolto il problema nel mio caso, ma grazie per aver postato la tua soluzione @qedejavu ^.^ –

+2

Ciao Rahul, in realtà lo faccio controllare l'esistenza della cartella, e in effetti esiste, e le immagini sono memorizzate lì, ma ancora il pulsante OK non mi riporta alla mia attività. Quindi, quello che ha scritto @qedejavu non sembra essere la soluzione. Riesci a ricordare come hai risolto il problema? –

+2

Ciò accade anche quando l'app Camera nativa non ha accesso alla directory in cui stai cercando di salvarla. Ad esempio, la memoria privata della tua app non è accessibile all'app Camera nativa. –

1

Inoltre, assicurarsi che l'applicazione dispone di <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> se si sta utilizzando Environment.getExternalStorageDirectory().getPath() sopra.

Spero che questo aiuti =)

1

prega di consultare questo

Caso 1:

Uri newImageUri = null; 

File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/"); 

path.mkdirs(); 

boolean setWritable = false; 

setWritable = path.setWritable(true, false); 

File file = new File(path, "Image_Story_" + System.currentTimeMillis() + ".jpg"); 

newImageUri = Uri.fromFile(file); 

Log.i("MainActivity", "new image uri to string is " + newImageUri.toString()); 

Log.i("MainActivity", "new image path is " + newImageUri.getPath());    

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri); 

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE); 

Caso 2:

String fileName = "" + System.currentTimeMillis() + ".jpg"; 

ContentValues values = new ContentValues(); 

values.put(MediaStore.Images.Media.TITLE, fileName); 

values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera"); 

values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 

Uri imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

Log.i("MainActivity", "new image uri to string is " + imageUri.toString()); 

Log.i("MainActivity", "new image path is " + imageUri.getPath()); 

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE); 

sono in grado di salvare le immagini attraverso la macchina fotografica su Nexus s in entrambi i casi sopra indicati Nel caso 1: a. L'immagine è memorizzata nella cartella personalizzata. b. Se "System.currentTimeMillis()" è cambiato in ("new Date(). ToString()") l'immagine non viene salvata e la fotocamera non ritorna alla mia attività. (Probabilmente perché "System.currentTimeMillis" non ha spazi e "new Date(). ToString()" potrebbe avere alcuni caratteri e spazi speciali) Nel caso 2: a. L'immagine è memorizzato nella cartella della fotocamera

Grazie a tutti

0

Ho lo stesso problem.You hanno a che fare solo un lavoro, nel vostro controllo di archiviazione del telefono che avete Immagini directory o not.If non lo fai avere una tale libreria quindi eseguirla manualmente.

Spero che questo funzioni per voi.

Problemi correlati