2011-09-01 17 views
18

Estoy llamando a la cámara predeterminada de mi actividad y luego manejo el resultado de activación. Mi código parece funcionar bien en el LG Ally que no tiene una confirmación cuando se toma una foto. Sin embargo, cuando ejecuto la misma aplicación en el Nexus S, aparece un mensaje de "Ok", "Retake" o "Cancel" antes de regresar a mi actividad. Mientras "Cancelar" funciona, volviendo a mi actividad sin guardar la imagen, "Ok" no parece tener ningún efecto, ni siquiera regresa a mi actividad.La actividad predeterminada de la cámara no finaliza Al presionar el botón Aceptar, presione

Mi código de abajo:

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

asegúrate de otorgar el permiso de almacenamiento –

Respuesta

15

creo que sólo tenía el mismo problema.

Si la ruta para guardar la imagen no es correcta, la cámara no volverá a su aplicación. Una vez que me aseguré de que el directorio existiera, todo funcionó bien. Asegúrese de que el directorio exista, entonces debería funcionar.

- Editar -

que acabo de ver, que llame path.mkdirs(); pero creo que no funciona. Como puede leer en el documento de Android "Tenga en cuenta que este método no arroja IOException en caso de error. Las personas que llaman deben verificar el valor de retorno". Asegúrese de verificar si el directorio realmente existe.

hth

+0

hmm, esto fue hace tanto tiempo que realmente no recuerdo cómo solucioné el problema en mi caso, pero gracias por publicar tu solución @qedejavu ^.^ –

+2

Hola Rahul, de hecho lo hago compruebe la existencia de la carpeta, y de hecho existe, y las imágenes están almacenadas allí, pero aun así el botón Aceptar no me devuelve a mi actividad. Entonces, lo que @qedejavu escribió no parece ser la solución. ¿Puedes recordar cómo resolvió el problema? –

+2

Esto también ocurre cuando la aplicación nativa de la cámara no tiene acceso al directorio en el que está intentando guardarlo. Por ejemplo, no se puede acceder al almacenamiento privado de la aplicación nativa de la Cámara. –

1

También, asegúrese de que su aplicación tiene <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> si está usando Environment.getExternalStorageDirectory().getPath() anteriormente.

Espero que esto ayude =)

1

Selecciona esta

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); 

soy capaz de guardar las imágenes a través de la cámara en Nexus s en los dos casos anteriores En el caso 1: a. La imagen se almacena en una carpeta personalizada. b. Si se cambia "System.currentTimeMillis()" a ("new Date(). ToString()" la imagen no se guarda y la cámara no vuelve a mi actividad. (Probablemente porque "System.currentTimeMillis" no tiene espacios y "new Date(). ToString()" podría estar teniendo algunos caracteres y espacios especiales) En el caso 2: a. La imagen se almacena en la carpeta de la cámara

Gracias a todos

0

tengo problem.You misma tiene que hacer sólo un trabajo, en su cheque de almacenamiento de teléfono que haya Fotos directorio o no lo hace not.If tener dicha biblioteca y luego hacerlo manualmente.

Espero que esto funcione para usted.

Cuestiones relacionadas