2011-11-05 19 views
66

estoy tratando de pasar un URI-Object para mi Intención con el fin de utilizar ese URI en otra actividad ...¿Cómo pasar un URI a un intento?

¿Cómo pasar un URI?

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

¿Cómo uso ahora este URI en mi otra actividad?

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

Gracias chicos

+0

posible duplicado de [Cómo obtener datos adicionales de la intención de Android?] (http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android) –

+0

posible duplicado de [¿Cómo enviar un objeto de una actividad de Android a otra usando Intents? ] (http://stackoverflow.com/questions/2 139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents) – Craigy

Respuesta

142

que puede almacenar el URI como cadena

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

y luego simplemente convertir la cadena de nuevo a uri como esto

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

ok genial ... pero no sé cómo almacenar un uri como una cadena :( –

+0

En el código anterior, se convierte en una cadena. imageuri.toString() está convirtiendo el uri en una cadena para ti. – Rufflez

+1

@malclocke tiene una mejor solución. No es necesario convertir manualmente a cadena y volver. – clocksmith

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


Y luego se puede recuperar de esta manera:

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

La clase Uri implementa Parcelable, por lo que puede añadir y extraer directamente 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"); 

Se puede utilizar el mismo método para todos los objetos que implementa Parcelable, y puede implementar Parcelable en sus propios objetos si es necesario.

+7

Sugerencia a cualquier persona en el futuro: ¡asegúrese de estar usando 'android.net.Uri' y no' java.net.URI'! –

+3

Para referencia futura, si está colocando varios extras en un objeto Bundle antes de usar 'intent.putExtras (bundle);', use 'bundle.putParcelable (" imageUri ", uri);' en lugar de usar 'intent.putExtra (...); 'directamente en el objeto' Intento'. – Armando

38

En un intento, puede poner directamente Uri. No necesita convertir el Uri en cadena y convertir de nuevo a Uri.

Mire este enfoque simple.

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

Y para obtener el Uri detrás de la intención:

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

Pidiéndole explícitamente a los lectores que hagan +1 a su publicación me parece una práctica dudosa. ¿No debería el valor agregado de su solución hablar por sí mismo? –

-1

se puede hacer de esta manera. imageuri se puede convertir en una cadena como esta.

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

0

aquí cómo lo uso; Este botón dentro de mi CameraActionActivity clase actividad en la que yo llamo la cámara

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

Y mi otra clase Actividad DisplayVideo

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