107 votes

Comment passer une URI à une intention ?

J'essaie de passer un objet URI à mon Intent afin d'utiliser cet URI dans une autre activité. dans une autre activité...

Comment passer un URI ?

private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);
startActivity(intent);
this.finish();

Comment puis-je utiliser cette URI dans mes autres activités ?

 imageUri = extras.getString("imageUri"); // I know thats wrong ...

Merci à vous.

0 votes

0 votes

188voto

Lukap Points 7412

Vous pouvez stocker l'uri en tant que chaîne de caractères

intent.putExtra("imageUri", imageUri.toString());

et ensuite convertir la chaîne en uri comme ceci

Uri myUri = Uri.parse(extras.getString("imageUri"));

2 votes

Ok cool ... mais je ne sais pas comment stocker un uri comme une chaîne :(

0 votes

Dans le code ci-dessus, il est converti en chaîne. imageuri.toString() convertit l'uri en chaîne pour vous.

1 votes

@malclocke a une meilleure solution. Il n'est pas nécessaire de convertir manuellement en chaîne et inversement.

145voto

malclocke Points 2315

Le site Uri La classe met en œuvre Parcelable afin que vous puissiez l'ajouter et l'extraire directement à partir de la page d'accueil du site. Intent

// Add a Uri instance to an Intent
intent.putExtra("imageUri", uri);

// Get a Uri from an Intent
Uri uri = intent.getParcelableExtra("imageUri");

Vous pouvez utiliser la même méthode pour tous les objets qui mettent en œuvre la fonction Parcelable et vous pouvez mettre en œuvre Parcelable sur vos propres objets si nécessaire.

11 votes

Un conseil pour tous ceux qui veulent se lancer dans l'avenir : Assurez-vous que vous utilisez android.net.Uri et non java.net.URI !

4 votes

Pour référence future, si vous mettez plusieurs extras dans un objet Bundle avant d'utiliser intent.putExtras(bundle); utiliser bundle.putParcelable("imageUri", uri); au lieu d'utiliser intent.putExtra(...); directement dans le Intent objet.

0 votes

Les tableaux fonctionnent aussi ! i.putExtra("URIList", uriList.toArray()); -> List<Uri> myList = i.getParcelableArrayListExtra("URIList");

56voto

sandy Points 1213

Dans Intent, vous pouvez directement mettre Uri. Vous n'avez pas besoin de convertir l'Uri en chaîne et de le reconvertir en Uri.

Regardez cette approche simple.

// put uri to intent 
intent.setData(imageUri);

Et pour faire revenir Uri de l'intention :

// Get Uri from Intent
Uri imageUri=getIntent().getData();

2 votes

Attention : La réponse/solution ci-dessus ne doit pas être utilisée pour les diffusions locales car vous risquez de ne pas être reçu. Pour les diffusions locales, il est préférable d'utiliser la réponse de Malclocke : stackoverflow.com/a/13981436/1617737 .

1voto

silentw Points 2937
private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri.toString());
startActivity(intent);
this.finish();

Et ensuite vous pouvez le récupérer comme ceci :

imageUri = Uri.parse(extras.getString("imageUri"));

1voto

Sam Points 2090

Voici comment je l'utilise ; Ce bouton dans mon CameraActionActivity Classe d'activité où j'appelle la caméra

 btn_frag_camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intenImatToSec = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                startActivityForResult(intenImatToSec, REQUEST_CODE_VIDEO);
                //intenImatToSec.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                //intenImatToSec.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
                //Toast.makeText(getActivity(), "Hello From Camera", Toast.LENGTH_SHORT).show();
            }
        });

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {

            if (requestCode == REQUEST_CODE_IMG) {
                Bundle bundle = data.getExtras();
                Bitmap bitmap = (Bitmap) bundle.get("data");
                Intent intentBitMap = new Intent(getActivity(), DisplayImage.class);
                // aldgmz imagi burda yonlendirdiimiz snfa iletiyoruz
                ByteArrayOutputStream _bs = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs);
                intentBitMap.putExtra("byteArray", _bs.toByteArray());
                startActivity(intentBitMap);

            } else if (requestCode == REQUEST_CODE_VIDEO) {
                Uri videoUrl = data.getData();
                Intent intenToDisplayVideo = new Intent(getActivity(), DisplayVideo.class);
                intenToDisplayVideo.putExtra("videoUri", videoUrl.toString());
                startActivity(intenToDisplayVideo);
            }
        }
    }

Et mon autre AffichageVidéo Classe d'activité

VideoView videoView = (VideoView) findViewById(R.id.videoview_display_video_actvity);
Bundle extras = getIntent().getExtras();
        Uri myUri=  Uri.parse(extras.getString("videoUri"));
        videoView.setVideoURI(myUri);

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