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

时间:2012-04-30 16:13:36

标签: android image android-intent android-manifest android-activity

我正在Android中编写图像编辑器。到目前为止它只有一个活动。从这个活动,我可以使用调用Gallery活动的菜单选项加载图像,在onActivityResult中我将接收到的图像处理为画布,以便我可以编辑它。这很好。

我现在要做的是让这个活动可以从其他任何地方调用,所以我不必从活动中选择一个图像,我可以打开图库,选择一张照片并将其发送到我的应用程序。但我无法弄清楚如何。

在我的清单上,我将以下内容放在<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 个答案:

答案 0 :(得分:23)

你想要的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

的详细信息