2011-11-05 9 views
66

che sto cercando di passare un URI-Object per il mio intento, al fine di utilizzare tale URI in un'altra attività ...Come passare un URI a un intent?

Come faccio a passare un URI?

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

Come utilizzare ora questo URI nella mia altra attività?

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

Grazie ragazzi

+0

possibile duplicato di [Come ottenere i dati extra da intenti Android?] (http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android) –

+0

possibile duplicato di [Come inviare un oggetto da un'attività Android a un altro utilizzando Intenti? ] (http://stackoverflow.com/questions/2 139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents) – Craigy

risposta

142

è possibile memorizzare l'URI come stringa

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

e poi basta convertire la stringa di nuovo a uri come questo

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

ok cool ... ma non so come memorizzare un uri come stringa :( –

+0

Nel codice sopra, è convertito in una stringa. imageuri.toString() sta convertendo l'uri in una stringa per te. – Rufflez

+1

@malclocke ha una soluzione migliore. Non è necessario convertire manualmente in stringa e viceversa. – clocksmith

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


E poi è possibile recuperare in questo modo:

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

La classe Uri implementa Parcelable, in modo da poter aggiungere ed estrarre direttamente dal Intent

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

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

È possibile utilizzare lo stesso metodo per tutti gli oggetti che implementa Parcelable ed è possibile implementare Parcelable sui propri oggetti, se necessario.

+7

Suggerimento per chiunque in futuro: assicurati di utilizzare 'android.net.Uri' e non' java.net.URI'! –

+3

Per riferimento futuro, se stai mettendo diversi extra in un oggetto Bundle prima di usare 'intent.putExtras (bundle);', usa 'bundle.putParcelable (" imageUri ", uri);' invece di usare 'intent.putExtra (...); 'direttamente nell'oggetto' Intento'. – Armando

38

In un intento, è possibile mettere direttamente Uri. Non è necessario convertire l'Uri in stringa e riconvertire nuovamente in Uri.

Guarda questo semplice approccio.

// Put the uri to intent 
intent.setData(imageUri); 

E per ottenere l'Uri ritorno dalla intento:

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

Chiedere esplicitamente ai lettori di fare +1 sul tuo post mi sembra una pratica dubbia. Non dovrebbe il valore aggiunto della tua soluzione parlare da solo? –

-1

si può fare in questo modo. imageuri può essere convertito in una stringa come questa.

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

0

qui come lo uso; Questo pulsante dentro la mia CameraActionActivity classe attività in cui io chiamo fotocamera

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

e la mia altra DisplayVideo Classe Attività

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