如何找到添加到应用程序意图中的“额外内容”?

时间:2013-12-17 13:12:55

标签: java android android-intent intentfilter

我正在处理的应用程序需要利用设备上其他应用程序的功能。

这是Intents and Intent Filters应该在Android中处理的范例。我将给出一个具体的例子,说明所有情况的情况(并且实际上没用)。

  

示例:使用Intent将MMS的内容传递到消息传递应用程序:

     
      
  1. 我转到Intent class reference并查找哪个系统ACTION看起来最合适(已猜测 - ACTION_SEND   vs ACTION_SENDTO vs ACTION_VIEW 假设ACTION   是系统宣布的一个)
  2.   
  3. 我尝试找出是否有特定的Uri来提供数据(Google this list适用于Google应用程序而且我是   假设这预计将由所有应用程序提供并找到   单独?)
  4.   
  5. 我现在想要找到应该使用EXTRA个键来提供数据(消息正文文本,图像)。我不知道也没有暗示   任何?
  6.   

当然,我可以查看StackOverflow并找到答案herehere哪种给出我正在寻找的答案(我没有找到任何答案提供收件人的彩信图像同时)。但这应该如何实际上一般地完成?如果人们发现非系统的,非通用的sms_body EXTRA密钥怎么样?

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

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

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

唯一明显的答案是,Android SDK中的某些类可以访问哪些应用声明并定义了他们希望接收的信息。我在这方面找到的最接近的是PackageManager.GET_INTENT_FILTERShas not even been implmented.

  • 我该如何理解如何正确生成Intent以传递给期望此数据的应用?
  • 最重要的是,我应该如何找到传递EXTRA的正确Intent?它们是否在apk的源代码中定义在其他任何地方?

我必须遗漏一些东西,因为在严重依赖应用程序间通信的手机操作系统中,为什么获取基本通信协议会如此困难。

1 个答案:

答案 0 :(得分:2)

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

我认为这类似于找出API公开的某些命令。如果运气好(java类,带有wsdl的SOAP API),它实际上会告诉您可以执行的操作。但如果不是(REST API),那么阅读文档就会“陷入困境”。这是一种实际可能性,因此“我怎么能这样做”并不一定有答案。

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

因此,您必须阅读要使用的应用程序的文档。如果没有一个,你可能只需要得出那样的结论。

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