2011-11-05 88 views
66

我试图将URI对象传递给我的意图,以便在另一个活动中使用该URI ...如何将URI传递给intent?

如何传递URI?

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

如何在我的其他活动中使用此URI?

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

谢谢你们

+0

可能重复[如何从Android中意图额外的数据?] (http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android) –

+0

可能的重复[如何使用Intents从一个Android活动发送对象到另一个? ](http://stackoverflow.com/questions/2 139134 /如何发送一个对象从一个Android的活动,以另一种使用意图) – Craigy

回答

142

您可以将URI存储为字符串

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

,然后只是转换的字符串返回URI这样

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

好酷...但我不知道如何存储一个字符串:( –

+0

在上面的代码中,它转换为一个字符串。 imageuri。toString()将uri转换为一个字符串。 – Rufflez

+1

@malclocke有更好的解决方案。无需手动转换为字符串并返回。 – clocksmith

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


然后你就可以像这样取,

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

Uri类实现Parcelable,这样你就可以直接从Intent

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

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

添加和解压您可以使用同样的方法对任何对象实现Parcelable,如果需要,您可以在自己的对象上实现Parcelable

+7

向未来的任何人提示:确保你使用'android.net.Uri'而不是'java.net.URI'! –

+3

为了将来的参考,如果你在使用'intent.putExtras(bundle);'之前在Bundle对象中添加了多个额外元素,请使用'bundle.putParcelable(“imageUri”,uri);'而不是使用'intent.putExtra ...);'直接在'Intent'对象中。 – Armando

38

在一个意图,你可以直接把Uri。您不需要将Uri转换为字符串,然后再转换回Uri。

看看这个简单的方法。

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

而要得到URI从后面的意图:

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

要求读者明确地+1您的帖子似乎是一个令人怀疑的做法给我。你的解决方案的附加价值不应该说明问题吗? –

-1

你可以做到这样。 imageuri可以像这样转换成字符串。

intent.putExtra(“imageUri”,imageUri.toString());

0

这里我如何使用它; 我CameraActionActivity Activity类,我称之为相机

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

而我的其他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); 
相关问题