如何将URI传递给intent?

Rob*_* El 94 java android uri android-intent

我正在尝试将URI-Object传递给我的Intent,以便在另一个活动中使用该URI ...

如何传递URI?

private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);
startActivity(intent);
this.finish();
Run Code Online (Sandbox Code Playgroud)

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

 imageUri = extras.getString("imageUri"); // I know thats wrong ...
Run Code Online (Sandbox Code Playgroud)

感谢你们

Luk*_*kap 169

你可以将uri存储为字符串

intent.putExtra("imageUri", imageUri.toString());
Run Code Online (Sandbox Code Playgroud)

然后只需将字符串转换回uri就像这样

Uri myUri = Uri.parse(extras.getString("imageUri"));
Run Code Online (Sandbox Code Playgroud)

  • 好的,很酷...但是我不知道如何将uri作为字符串存储:( (2认同)
  • 有一瞬间我想知道“额外”是什么意思。简单来说: `intent.putExtra("imageUrl", mImageUri.toString());` **在其他活动中** `String imageUrl = getIntent().getStringExtra("imageUrl");` `Uri mImageUri = Uri.解析(图像网址);` (2认同)

mal*_*cke 131

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");
Run Code Online (Sandbox Code Playgroud)

您可以对实现的任何对象使用相同的方法Parcelable,并且可以Parcelable根据需要在您自己的对象上实现.

  • 未来的任何人提示:确保你使用的是'android.net.Uri`而不是`java.net.URI`! (10认同)
  • 为了将来参考,如果你在使用`intent.putExtras(bundle);`之前在Bundle对象中添加了几个额外的东西,请使用`bundle.putParcelable("imageUri",uri);`而不是使用`intent.putExtra(. ..);`直接在`Intent`对象中. (4认同)

san*_*ndy 50

在Intent中,您可以直接放入Uri.您不需要将Uri转换为字符串并再次转换回Uri.

看看这个简单的方法.

// put uri to intent 
intent.setData(imageUri);
Run Code Online (Sandbox Code Playgroud)

并让Uri从意图中恢复:

// Get Uri from Intent
Uri imageUri=getIntent().getData();
Run Code Online (Sandbox Code Playgroud)

  • **警告:** 上述答案/解决方案不应用于本地广播,因为您可能会发现它们不会被接收。对于本地广播,最好使用malclocke的回答:/sf/answers/978700551/。 (2认同)