java - intent详解 - 如何将URI传递给意图?




intent用法 (5)

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

我如何传递一个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 ...

感谢你们


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


你可以将uri存储为字符串

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

然后将这个字符串转换回uri

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

在Intent中,你可以直接放Uri。 您不需要将Uri转换为字符串,然后再转换回Uri。

看看这个简单的方法。

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

为了让Uri恢复意图:

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

+1这个答案,所以可以帮助更多的用户!


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

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

意向文件说:

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"

您不必使用内置的标准名称,但这可能是一种很好的做法,可以更好地重用。 查看开发人员文档以获取所有内置标准附加数据字段的列表。


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




uri