android 如何将URI传递给Intent?

egmofgnx  于 2024-01-04  发布在  Android
关注(0)|答案(9)|浏览(159)

我正在尝试向Intent传递一个URI对象,以便在另一个Activity中使用该URI。
如何传递URI?

  1. private Uri imageUri;
  2. ....
  3. Intent intent = new Intent(this, GoogleActivity.class);
  4. intent.putExtra("imageUri", imageUri);
  5. startActivity(intent);
  6. this.finish();

字符串
如何在其他Activity中使用此URI?

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

hmmo2u0o

hmmo2u0o1#

你可以把uri存储为字符串

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

字符串
然后像这样把字符串转换回uri

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

oewdyzsn

oewdyzsn2#

Uri类实现了Parcelable,因此您可以直接从Intent中添加和提取它

  1. // Add a Uri instance to an Intent
  2. intent.putExtra("imageUri", uri);
  3. // Get a Uri from an Intent
  4. Uri uri = intent.getParcelableExtra("imageUri");

字符串
您可以对任何实现Parcelable的对象使用相同的方法,如果需要,您可以在自己的对象上实现Parcelable

neekobn8

neekobn83#

在Intent中,您可以直接放置Uri。您不需要将Uri转换为字符串,然后再转换回Uri。
看看这个简单的方法。

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

字符串
为了让乌里从意图中恢复过来:

  1. // Get Uri from Intent
  2. Uri imageUri=getIntent().getData();

b5buobof

b5buobof4#

  1. private Uri imageUri;
  2. ....
  3. Intent intent = new Intent(this, GoogleActivity.class);
  4. intent.putExtra("imageUri", imageUri.toString());
  5. startActivity(intent);
  6. this.finish();

字符串
然后你可以像这样获取它:

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

yvt65v4c

yvt65v4c5#

下面是我如何使用它;我的CameraActivityActivity类中的这个按钮,我在其中调用camera

  1. btn_frag_camera.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. Intent intenImatToSec = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
  5. startActivityForResult(intenImatToSec, REQUEST_CODE_VIDEO);
  6. //intenImatToSec.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
  7. //intenImatToSec.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
  8. //Toast.makeText(getActivity(), "Hello From Camera", Toast.LENGTH_SHORT).show();
  9. }
  10. });
  11. @Override
  12. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  13. if (resultCode == RESULT_OK) {
  14. if (requestCode == REQUEST_CODE_IMG) {
  15. Bundle bundle = data.getExtras();
  16. Bitmap bitmap = (Bitmap) bundle.get("data");
  17. Intent intentBitMap = new Intent(getActivity(), DisplayImage.class);
  18. // aldıgımız imagi burda yonlendirdiğimiz sınıfa iletiyoruz
  19. ByteArrayOutputStream _bs = new ByteArrayOutputStream();
  20. bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs);
  21. intentBitMap.putExtra("byteArray", _bs.toByteArray());
  22. startActivity(intentBitMap);
  23. } else if (requestCode == REQUEST_CODE_VIDEO) {
  24. Uri videoUrl = data.getData();
  25. Intent intenToDisplayVideo = new Intent(getActivity(), DisplayVideo.class);
  26. intenToDisplayVideo.putExtra("videoUri", videoUrl.toString());
  27. startActivity(intenToDisplayVideo);
  28. }
  29. }
  30. }

字符串
我的另一个DisplayVideo活动类

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

展开查看全部
igsr9ssn

igsr9ssn6#

如果你想使用标准的额外数据字段,你可以这样做:

  1. private Uri imageUri;
  2. ....
  3. Intent intent = new Intent(this, GoogleActivity.class);
  4. intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString());
  5. startActivity(intent);
  6. this.finish();

字符串
Intent的文档说:

  1. EXTRA_STREAM added in API level 1
  2. String EXTRA_STREAM
  3. A content: URI holding a stream of data associated with the Intent,
  4. used with ACTION_SEND to supply the data being sent.
  5. Constant Value: "android.intent.extra.STREAM"


你不必使用内置的标准名称,但这可能是一个很好的做法,更可重用。查看开发人员文档,了解所有内置的标准额外数据字段的列表。

展开查看全部
2nc8po8w

2nc8po8w7#

Uri.parse(extras.getString("imageUri"))导致错误:

  1. java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Intent.putExtra(java.lang.String, android.os.Parcelable)' on a null object reference

字符串
所以我改成了以下内容:

  1. intent.putExtra("imageUri", imageUri)


  1. Uri uri = (Uri) getIntent().get("imageUri");


这就解决了问题。

展开查看全部
jum4pzuy

jum4pzuy8#

:Kotlin方式:
活动:

  1. val mIntent = Intent(mContext, YourDestinationActivity::class.java)
  2. mIntent.putExtra("key_pass_uri", mImageUri.toString())
  3. startActivity(mIntent)

字符串

接收方活动:

  1. val mImageUri = Uri.parse(intent.getStringExtra("key_pass_uri"))

dgenwo3n

dgenwo3n9#

你可以这样做。imageuri可以转换成字符串这样。
Intent.putExtra(“imageUri”,imageUri.toString());

相关问题