2

我不知道为什么,但是在 Eclair 中,默认(非花哨)图库应用程序从 Cupcake 版本改变了它的行为,它破坏了我的一个商业应用程序:-(

首先,当长按图库并选择“Diashow”时,它不再发布要被任何实现 Intent 过滤器的应用程序拾取的 Intent。相反,它将直接调用带有附加功能的“com.android.gallery/com.android.camera.ViewImage”。

问题:是否仍然可以拦截此意图并允许用户选择我的应用程序来进行 Diashow?

其次,VIEW 意图的额外意图被搞砸了(无论如何,在我的 2.1 版本中):而不是在意图的查询参数中提供图片的 BucketId。但是在 2.1 中,BucketId 被移到了 Intent 的 extras 中。除了; 它没有通过BUCKET_ID,而是未本地化BUCKET_DISPLAY_NAME:-/

问题:我怎样才能BUCKET_ID从意图中获得唯一性,这样我就不必使用潜在的非唯一性BUCKET_DISPLAY_NAME

有没有人提出了解决这些问题的有效解决方案?

我认为 Android Intents 的整个想法是能够将您的应用程序与基本 Android 环境集成,但我构建的 2.1 证明这个想法仍然存在于理论领域:-(

4

2 回答 2

1

首先,当长按图库并选择“Diashow”时,它不再发布要被任何实现 Intent 过滤器的应用程序拾取的 Intent。

Intent可能不是 SDK 的一部分,这意味着您一开始就不应该依赖它。作为 SDK 一部分的 Gallery 应用程序不存在Intents,除了 Gallery 支持通用的范围Intents(例如GET_CONTENT, PICK)。

问题:是否仍然可以拦截此意图并允许用户选择我的应用程序来进行 Diashow?

我当然希望不会,因为这意味着存在严重的安全漏洞。

问题:我怎样才能从意图中获得唯一的 BUCKET_ID,这样我就不必使用可能不唯一的 BUCKET_DISPLAY_NAME?

Intent没有记录。请不要尝试使用它。您的应用程序将在一些不提供标准 Gallery 应用程序的 Android 设备上中断。正如您已经经历过的那样,您的应用程序将在未来的 Android 版本中出现问题。请坚持Intents应用程序作者已记录的内容。

我认为 Android Intents 的整个想法是能够将您的应用程序与基本 Android 环境集成

仅在那些Intents被记录并得到相关应用程序作者支持的情况下。如果你认为你可以随便抓取Intents你在源代码或 LogCat 或其他东西中找到的随机数,然后使用它们,那你就错了。

于 2010-04-26T13:17:51.367 回答
0

问题:是否仍然可以拦截此意图并允许用户选择我的应用程序来进行 Diashow?

回答您的第一个问题....但是有了这个,您可能需要重建您的应用程序,然后更新...

要使仅您的活动接收您触发的意图,请向该意图添加一个附加标志或创建您自己的自定义操作,然后触发一个意图。在接收活动时,在您的应用程序清单文件中设置一个意图过滤器,提及您的自定义操作。你在这里完成了。只有使用您的自定义操作 Intent 过滤器分配的活动才会收到您的 Intent。

问题:我怎样才能从意图中获得唯一的 BUCKET_ID,这样我就不必使用可能不唯一的 BUCKET_DISPLAY_NAME?

不要尝试这样做,因为您可能会遇到麻烦,因为它可能会破坏您在以前的 android 版本上的应用程序。

于 2010-04-26T13:22:09.370 回答