意图过滤器:intent.getData() 返回 null

Posted

技术标签:

【中文标题】意图过滤器:intent.getData() 返回 null【英文标题】:Intent filter: intent.getData() returns null 【发布时间】:2012-05-10 08:12:01 【问题描述】:

我正在用 android 编写一个图像编辑器。到目前为止,它只有一个活动。在这个活动中,我可以使用调用 Gallery 活动的菜单选项加载图像,并在 onActivityResult 中处理接收到的图像来绘制我的画布,以便我可以编辑它。这工作正常。

我现在想做的是让这个 Activity 可以从其他任何地方调用,因此我不必从 Activity 中选择图像,只需打开图库,选择一张照片并将其发送到我的应用程序。但我不知道怎么做。

在我的清单中,我在<activity> 标签中添加了以下内容:

<intent-filter>
   <action android:name="android.intent.action.SEND" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="image/*" />
</intent-filter>

然后,在我的活动中,如 http://developer.android.com/training/basics/intents/filters.html 中所述,我将以下内容放入 onCreate():

...
//after initializing my view and stuff

Intent intent =getIntent();
Uri image = intent.getData();

//code to do something with my uri
...

当我在手机中安装应用程序然后打开图库时,我可以选择一张图片并使用“发送”菜单,我的应用程序将显示在应用程序列表中,但是当我选择它时,我的应用程序会打开但会忽略图片。原来我从intent.getData() 得到的uri 是空的,我不知道为什么。

我做错了吗?我是不是忘记了什么?如果您必须知道,我使用随附的 CoolIris 库有现货 Android 2.3。

【问题讨论】:

【参考方案1】:

您想要的 Uri 在捆绑包中。我试过下面的代码,可以得到图像的 Uri 比如content://media/external/images/media/1750

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Uri uri = (Uri)bundle.get(Intent.EXTRA_STREAM);

更多信息可以看ACTION_SEND

【讨论】:

这正是我所需要的。谢谢!那么,谷歌的文档是错误的还是我误读了什么? 查看 ACTION_SEND 文档,它解释了您应该关注的 input

以上是关于意图过滤器:intent.getData() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Camera intent.getData()在某些设备上返回null,主要在android 7.0

安卓 Intent.getData() 为空

android.os.FileUriExposedException:通过 Intent.getData() 异常暴露在应用程序之外,同时共享 VCFile

Android报错: exposed beyond app through Intent.getData()

隐含意图:将图像从画廊分享到我的应用程序

简述 IntentFilter(意图过滤器)