2012-09-18 22 views
5

Estoy tratando de levantar una simple aplicación de Android que utiliza una cámara a través de Intents. El código es bastante directo desde el Android documentation here, pero no funciona para mí.La cámara Android con intención no regresa en el RESULT_OK caso

La aplicación de la cámara se abre como se esperaba después de la llamada a startActivityForResult(), pero nunca regresa después de tomar una foto (?!). Específicamente, no regresa después de tomar una foto y elegir el icono de aceptar (marca de verificación en Galaxy Nexus). Pero vuelve después de que selecciono el ícono de cancelación ('X' en el mismo teléfono).

Aquí está el código (nota, estoy trabajando a partir de un fragmento, no una actividad):

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.my_layout, container, false); 

    final Button btnCamera = (Button) view.findViewById(R.id.cameraid); 

    View.OnClickListener handler = new View.OnClickListener() { 
     public void onClick(View v) { 
      if (v == btnCamera) { 
       Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

       // create a file to save the image 
       File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages"); 
       imagesFolder.mkdirs(); 
       File image = new File(imagesFolder, "image_001.jpg"); 
       Uri uriSavedImage = Uri.fromFile(image); 

       // start the image capture Intent 
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
       startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 
      } 
     } 
    } 
    btnCamera.setOnClickListener(handler); 
} 

y

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      // Image captured and saved to fileUri specified in the Intent 
      Toast.makeText(getActivity(), "Image saved to:\n" + 
        data.getData(), Toast.LENGTH_LONG).show(); 
     } 
     else if (resultCode == Activity.RESULT_CANCELED) { 
      // User cancelled the image capture 
     } else { 
      // Image capture failed, advise user 
     } 
    } 

¿Qué necesito cambiar para hacer este trabajo? Gracias.

Respuesta

12

Vaya, funcionó cuando he añadido las líneas de manifiesto siguientes:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.CAMERA"/> 

equivocadamente pensé que estas líneas no eran necesarias si su aplicación se basa en una aplicación de la cámara externa. ¡Pero estaba equivocado acerca de eso! Gracias.

+0

Gracias Dylan, - haré. – gcl1

Cuestiones relacionadas