it-swarm.com.de

Wie übergebe ich einen URI an eine Absicht?

Ich versuche, ein URI-Objekt an meine Absicht zu übergeben, um diese URI in einer anderen Aktivität zu verwenden ...

Wie übergebe ich eine URI?

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

Wie verwende ich diesen URI jetzt in meiner anderen Aktivität?

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

Danke Jungs

92
Robert El

du kannst den uri als string speichern

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

und dann konvertieren Sie einfach die Zeichenfolge zurück zu Uri wie folgt

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

Die Klasse Uri implementiert Parcelable, sodass Sie sie direkt aus der Klasse Intent hinzufügen und extrahieren können.

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

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

Sie können dieselbe Methode für alle Objekte verwenden, die Parcelable implementieren, und Sie können Parcelable bei Bedarf für Ihre eigenen Objekte implementieren.

131
malclocke

In Intent können Sie Uri direkt einfügen. Sie müssen den Uri nicht in einen String konvertieren und ihn dann wieder in Uri konvertieren.

Schauen Sie sich diesen einfachen Ansatz an.

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

Und um Uri von der Absicht zurückzuholen:

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

Wenn Sie ein zusätzliches Standarddatenfeld verwenden möchten, gehen Sie folgendermaßen vor:

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

In der Dokumentation zu Intent heißt es:

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"

Sie müssen nicht die integrierten Standardnamen verwenden, aber es ist wahrscheinlich eine gute Übung und wiederverwendbarer. In der Entwicklerdokumentation finden Sie eine Liste aller integrierten Standard-Zusatzdatenfelder.

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


Und dann kannst du es so holen:

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

hier, wie ich es benutze; Diese Schaltfläche in meiner CameraActionActivity Aktivitätsklasse, in der ich die Kamera aufrufe

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

Und meine andere DisplayVideo Aktivitätsklasse

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