web-dev-qa-db-fra.com

Comment passer un URI à une intention?

J'essaie de passer un URI-Object à mon intention afin d'utiliser cet URI 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 utiliser maintenant cet URI dans mon autre activité?

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

Merci les gars

92
Robert El

vous pouvez stocker l'URI sous forme de chaîne

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

puis convertissez simplement la chaîne en uri comme ceci

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

La classe Uri implémente Parcelable, vous pouvez donc l'ajouter et l'extraire directement à partir de la 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 implémentent Parcelable et vous pouvez également implémenter Parcelable sur vos propres objets.

131
malclocke

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

Regardez cette approche simple.

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

Et pour récupérer Uri d'intention:

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

Si vous souhaitez utiliser un champ de données supplémentaires standard, procédez comme suit:

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

La documentation relative à l'intention indique:

EXTRA_STREAM   added in API level 1 
String EXTRA_STREAM
A content: URI holding a stream of data associated with the Intent,
used with ACTION_SEND to supply the data being sent. 

Constant Value: "Android.intent.extra.STREAM"

Vous n'avez pas à utiliser les noms standard intégrés, mais c'est probablement une bonne pratique et plus réutilisable. Consultez la documentation du développeur pour obtenir une liste de tous les champs de données supplémentaires standard intégrés.

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


Ensuite, vous pourrez aller le chercher comme ceci:

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

voici comment je l'utilise; Ce bouton dans ma CameraActionActivity Classe d'activité où j'appelle 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);
                // aldıgımız imagi burda yonlendirdiğimiz sınıfa 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 DisplayVideo 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);
1
Sam