[Android] Transférer Bitmap à travers un intent

  • Réponses :1
Hey Guadah
  • Posts de Forum 5

22 nov. 2015 à 02:27:30 via site

Bonjour les développeurs !

Je me permets aujourd'hui de revenir vers vous car j'ai un léger problème dans mon projet.
En effet je me suis mit en tête de faire passer un Bitmap dans un intent pour le faire naviguer entre deux activités.
J'ai réussis à construire l'activité pour envoyer le bitmap en question dans un intent mais je me suis rendu compte que je n'arrivais pas à le récupérer dans mon activité d'arriver.
J'imagine donc qu'il est impossible d'envoyer un Bitmap directement et qu'il doit y avoir une méthode pour le convertir dans un autre format ou d'utiliser l'id de l'image pour l'intent mais je dois avouer que je sèche un peu, c'est actuellement hors de mes compétences.
Avez-vous des idées afin de m'aider dans mon projet ?

Je vous partage mon activité

public class RegisterPhoto extends AppCompatActivity implements View.OnClickListener {

    private static final int RESULT_LOAD_IMAGE = 1;

    private ImageView imageToUpload;
    private Button bUploadImage, btn_check;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_photo);

        imageToUpload = (ImageView) findViewById(R.id.imageToUpload);
        bUploadImage = (Button) findViewById(R.id.bUploadImage);
        btn_check = (Button) findViewById(R.id.btn_send);

        bUploadImage.setOnClickListener(this);

        btn_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageToUpload.buildDrawingCache();
                final Bitmap photo = imageToUpload.getDrawingCache();

                if (photo != null) {
                    Intent intent = new Intent(getApplicationContext(), RegisterGeoloc.class);
                    Bundle extras = new Bundle();   //*
                    extras.putParcelable("imagebitmap", photo);
                    intent.putExtra("imagebitmap", photo);                  //Send image
                    startActivity(intent);
                    Toast.makeText(getApplicationContext(), getApplicationContext().getString(R.string.ok), Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), getApplicationContext().getString(R.string.nok), Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    public void onClick(View v){
        switch (v.getId()){
            case R.id.bUploadImage:
                Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
                break;

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
            Uri selectedImage = data.getData();
            imageToUpload.setImageURI(selectedImage);
        }
    }

L'image est choisit par l'utilisateur dans son espace de stockage externe et la boucle if ne renvoie pas null pour la variable photo.

Merci pour vos réponses !

Répondre
Compte désactivé
  • Posts de Forum 23

24 nov. 2015 à 15:50:16 via site

Salut,

déjà j'ai un doute sur ce code:

Bundle extras = new Bundle(); //*
extras.putParcelable("imagebitmap", photo);
intent.putExtra("imagebitmap", photo);

Soit tu passes le bundle "extras" soit l'image mais en l'état le bundle est inutile.

Ensuite, comment lis-tu l'image dans la classe RegisterGeoloc?

Répondre