2012-09-18 11 views
5

Sto provando a mettere in piedi una semplice app Android che utilizza una telecamera tramite Intents. Il codice è praticamente uguale allo Android documentation here, ma non funziona per me.L'intenzione della videocamera Android non viene restituita nel caso RESULT_OK

L'app fotocamera si apre come previsto dopo la chiamata a startActivityForResult(), ma non ritorna mai dopo aver scattato una foto (?!). In particolare, non ritorna dopo aver scattato una foto e aver selezionato l'icona di accettazione (segno di spunta su Galaxy Nexus). Ma torna dopo aver scelto l'icona Annulla ('X' sullo stesso telefono).

Ecco il codice (nota, sto lavorando da un frammento, non un Attività):

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

e

@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 
     } 
    } 

Di cosa ho bisogno di cambiare per fare questo lavoro? Grazie.

risposta

12

Ops, ha funzionato quando ho aggiunto le linee evidenti:

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

ho erroneamente pensato queste righe non erano necessarie se la vostra applicazione si basa su un app fotocamera esterna. Ma ho sbagliato su questo! Grazie.

+0

Grazie Dylan, - lo farà. – gcl1

Problemi correlati