android - studio - La actividad predeterminada de la cámara no finaliza al presionar el botón OK
manual desarrollo de aplicaciones android pdf (4)
Además, asegúrese de que su aplicación tenga <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
si está usando Environment.getExternalStorageDirectory().getPath()
arriba.
Espero que esto ayude =)
Llamo a la cámara predeterminada desde mi actividad y luego manejo OnActivityResult. 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, me indica "Aceptar", "Retomar" o "Cancelar" antes de volver a mi actividad. Mientras "Cancelar" funciona, volver a mi actividad sin guardar la imagen, "Ok" no parece tener ningún efecto, ni siquiera volver a mi actividad.
Mi código a continuación:
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();
}
}
Creo que acabo de tener el mismo problema.
Si la ruta para guardar la imagen no es correcta, la cámara no regresará a su aplicación. Una vez que me aseguré de que el directorio existe, todo funcionó bien. Asegúrese de que el directorio exista, entonces debería funcionar.
- Editar -
Acabo de ver, que llamas 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". Por favor, asegúrese de verificar si el directorio realmente existe.
hth
Por favor, chequee esto
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);
Puedo guardar imágenes a través de la cámara en el nexo en los dos casos anteriores. En el caso 1: a. La imagen se almacena en una carpeta personalizada. segundo. Si "System.currentTimeMillis ()" se cambia 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 tener algunos caracteres y espacios especiales) En el caso 2: a. La imagen se almacena en la carpeta de la cámara.
Gracias a todos
Tengo el mismo problema. Solo tiene que hacer un trabajo, en la verificación de almacenamiento de su teléfono que tenga el directorio de Imágenes o no. Si no tiene dicha biblioteca, hágala manualmente.
Espero que esto funcione para usted.