2012-09-18 11 views
5

Ich versuche, eine einfache Android-App aufstehen, die eine Kamera über Intents verwendet. Der Code ist ziemlich direkt aus der Android documentation here, aber es funktioniert nicht für mich.Android Kamera Intent nicht in RESULT_OK Fall

Die Kamera-App wird nach dem Aufruf von startActivityForResult() wie erwartet geöffnet, kehrt aber nie zurück, nachdem ich ein Bild aufgenommen habe (?!). Insbesondere kehrt es nicht zurück, nachdem ich ein Foto gemacht habe und das Akzeptieren-Symbol gewählt habe (Häkchen bei Galaxy Nexus). Aber es kehrt zurück, nachdem ich das Symbol "Abbrechen" gewählt habe ("X" auf demselben Telefon).

Hier ist der Code (beachten Sie, ich arbeite von einem Fragment, keine Aktivität):

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

und

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

Was muss ich diese Arbeit machen ändern? Vielen Dank.

Antwort

12

Oops, es funktionierte, als ich die offensichtlichen Linien hinzugefügt:

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

ich fälschlicherweise dachte, diese Zeilen nicht erforderlich waren, wenn Ihre Anwendung auf einem externen Kamera-App beruht. Aber ich habe mich geirrt! Vielen Dank.

+0

Dank Dylan, - wird tun. – gcl1