145 votes

Caméra Android: l'intention de données renvoie null

J'ai une application android qui contient de multiples activités.

Dans l'un d'entre eux, je suis à l'aide d'un bouton d'appel à l'appareil photo de l'appareil :

public void onClick(View view) {
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(photoIntent, IMAGE_CAPTURE);
}

Dans la même activité, j'appelle l' OnActivityResult méthode pour l'image résultat :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            ImageView imageview = (ImageView) findViewById(R.id.pic);
            imageview.setImageBitmap(image);}
        else if (resultCode == RESULT_CANCELED) 
            {Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();}
    }
}

Le problème c'est que l'objectif data est nulle et l' OnActivityResult méthode se tourne directement vers l' (resultCode == RESULT_CANCELED) et l'application retourne à l'ancien avtivity.

Comment puis-je résoudre ce problème et après l'appel de la caméra, l'application renvoie à l'activité en cours qui contient un ImageView qui contient le prendre en photo?

Merci

248voto

Brian Slesinsky Points 710

La valeur par défaut d'Android de l'application appareil photo renvoie une valeur non nulle intention uniquement lors du passage de dos d'une vignette dans le retour de l'Intention. Si vous passer EXTRA_OUTPUT avec une URL à écrire, elle renvoie null intention et les photos est dans l'URL que vous avez croisé.

Vous pouvez le vérifier en regardant la caméra de l'application du code source sur github:

Je suppose que vous êtes de passage dans EXTRA_OUTPUT en quelque sorte, ou à l'application appareil photo sur votre téléphone fonctionne différemment.

1voto

Marius Hilarious Points 432

Probablement parce que tu as eu quelque chose comme ça?

 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                        
Uri fileUri =  CommonUtilities.getTBCameraOutputMediaFileUri();                  
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);                        
startActivityForResult(takePictureIntent, 2);
 

Cependant, vous ne devez pas placer la sortie supplémentaire dans l'intention, car les données sont ensuite transférées dans l'URI au lieu de la variable de données. Pour cette raison, vous devez prendre les deux lignes au milieu, de sorte que vous avez

 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 2);
 

C’est ce qui a causé le problème pour moi, espérons que cela a aidé

0voto

Sparky Points 6181

Vous transmettez le code d'action pour enregistrer une vidéo, mais vous traitez le résultat comme une photo.

0voto

Ben Jakuben Points 2049

Je travaillais sur ce problème ce matin et j'ai trouvé cette question et des réponses utiles qui pourraient également résoudre votre problème: Problème d'utilisation de la caméra dans onActivityResult

-1voto

Manitoba Points 2811

Le code suivant fonctionne pour moi:

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);
 

Et voici le résultat:

 protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    if(resultCode == RESULT_OK)
    {
        Uri selectedImage = imageReturnedIntent.getData();
        ImageView photo = (ImageView) findViewById(R.id.add_contact_label_photo);
        Bitmap mBitmap = null;
        try
        {
            mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X