【问题标题】:How to find what 'extras' to add to an intent to use with an app?如何找到要添加到与应用程序一起使用的意图的“附加内容”?
【发布时间】:2013-12-17 13:12:55
【问题描述】:

我正在开发的应用程序需要利用设备上可用的其他应用程序的功能。

这是Intents and Intent Filters 应该在 Android 中处理的范例。我将举一个具体的例子来说明这对于所有情况来说在哪里失败(并且实际上是无用的)。

示例:使用 Intent 将彩信的内容传递给消息应用:

  1. 我去Intent class reference 并找到哪个系统ACTION 看起来最合适(我已经猜到了-ACTION_SEND vs ACTION_SENDTO vs ACTION_VIEW 假设ACTION 是系统声明的)
  2. 我试着找出是否有特定的Uri 来提供数据(有this list 用于Google 应用程序,我是 假设这将由所有应用程序提供并找到 个人?)
  3. 我现在想找出应该使用哪些EXTRA 键来提供数据(消息正文、图像)。我不知道也没有提示 什么?

当然,我可以查看 StackOverflow 并找到答案 herehere 哪个给出了我正在寻找的答案(我还没有找到任何答案来提供带有收件人的彩信和强>图像同时)。但是这实际上应该如何一般地完成呢?非系统、非通用、sms_bodyEXTRA 密钥是如何被人们发现的?

我唯一的答案是直接从应用程序本身收集解决方案(我认为反编译别人的工作已经不应该是正确的方向,而是我唯一的方向)。所以我(这是通过支持 SMS 的新 Hangouts 应用完成的):

  1. 使用adb in /data/app/ 从我的root 设备下载应用程序
  2. 使用apktool反编译并获取清单文件。从这里我可以看到IntentFilters 的定义。我看不到任何东西 与EXTRAs 相关,因为它们不能在 IntentFilter
  3. 我尝试通过获取classes.dex 并使用dex2jar 进行反编译来获取源代码,然后使用JD-GUI 和查看 尝试解释几乎不可读的“半解压”代码以找到 使用通过Intent 传入的EXTRAS

这是我的尝试,似乎即使在第一步(反编译其他应用程序)这也不是您应该前进的方向找出与其他明确需要的应用程序通信的语言与之交谈(应用声明IntentFilter 以声明任何通过该过滤器的数据,它希望接收)。

唯一明显的答案是,可以通过 Android SDK 中的类访问某些内容,应用程序声明和定义 它们希望接收的信息。我在这方面找到的最接近的是PackageManager.GET_INTENT_FILTERS 标志,has not even been implmented.

  • 我应该如何弄清楚如何正确生成 Intents 以传递给需要此数据的应用?
  • 最重要的是,我应该如何找到正确的EXTRAs 来传递Intent?除了在 apk 的源代码中,它们是否在其他任何地方定义?

我一定是遗漏了什么,因为在严重依赖应用间通信的手机操作系统中,为什么要获得基本的通信协议会如此困难。

【问题讨论】:

    标签: java android android-intent intentfilter


    【解决方案1】:

    你为什么这么确定你错过了什么?

    我认为这类似于找出 API 公开的某些命令。如果你运气好(java 类,带有 wsdl 的 SOAP API),它实际上会告诉你你能做什么。但如果不是(REST API),你会“卡住”阅读文档。这是一种实际的可能性,所以“我该怎么做”不必有答案。

    在这种情况下,正如您所发现的,没有一些类似 java 的“合同”可以阅读并弄清楚您可以做什么。也没有像 wsdl 这样的可访问文件,您可以使用它来查看您可以做什么

    因此,您将不得不阅读您要使用的应用程序的文档。如果没有,您可能只需要得出结论就是这样。

    除了技术限制外,您通过反编译找到的解决方案存在问题:因为它可能会发生变化。如果仅记录了某些额外的内容,则您依赖的是“隐藏”功能。第二条道路,但有同样的问题,然后是一些,试图找到其他使用意图的代码(如 stackoverflow 问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      相关资源
      最近更新 更多