我正在处理的应用程序需要利用设备上其他应用程序的功能。
这是Intents and Intent Filters应该在Android中处理的范例。我将给出一个具体的例子,说明所有情况的情况(并且实际上没用)。
示例:使用Intent将MMS的内容传递到消息传递应用程序:
- 我转到Intent class reference并查找哪个系统
ACTION
看起来最合适(已猜测 -ACTION_SEND
vsACTION_SENDTO
vsACTION_VIEW
和假设ACTION
是系统宣布的一个)- 我尝试找出是否有特定的
Uri
来提供数据(Google this list适用于Google应用程序而且我是 假设这预计将由所有应用程序提供并找到 单独?)- 我现在想要找到应该使用
醇>EXTRA
个键来提供数据(消息正文文本,图像)。我不知道也没有暗示 任何?
当然,我可以查看StackOverflow并找到答案here和here哪种给出我正在寻找的答案(我没有找到任何答案提供收件人的彩信和图像同时)。但这应该如何实际上一般地完成?如果人们发现非系统的,非通用的sms_body
EXTRA
密钥怎么样?
我唯一的答案是直接从应用程序本身收集解决方案(我认为反编译其他人的工作已经不应该是正确的方向,但它是我唯一的方向)。所以我(这是通过支持短信的新环聊应用完成的):
这是我尝试这样做的,似乎即使在第一步(反编译其他应用程序),这也不是您应该前往的方向找出与其他明确需要的应用程序进行通信的语言与交谈(一个应用程序声明IntentFilter
声明通过该过滤器的任何数据,想要接收)。
唯一明显的答案是,Android SDK中的某些类可以访问哪些应用声明并定义了他们希望接收的信息。我在这方面找到的最接近的是PackageManager.GET_INTENT_FILTERS
旗has not even been implmented.
Intent
以传递给期望此数据的应用?EXTRA
的正确Intent
?它们是否在apk的源代码中定义在其他任何地方?我必须遗漏一些东西,因为在严重依赖应用程序间通信的手机操作系统中,为什么获取基本通信协议会如此困难。
答案 0 :(得分:2)
为什么你确定你错过了什么?
我认为这类似于找出API公开的某些命令。如果运气好(java类,带有wsdl的SOAP API),它实际上会告诉您可以执行的操作。但如果不是(REST API),那么阅读文档就会“陷入困境”。这是一种实际可能性,因此“我怎么能这样做”并不一定有答案。
在这种情况下,正如您所发现的,没有一些类似Java的“合同”可以阅读并弄清楚您可以做些什么。也没有像wsdl这样的可访问文件,您可以使用它来查看您可以执行的操作
因此,您必须阅读要使用的应用程序的文档。如果没有一个,你可能只需要得出那样的结论。
除了技术限制之外,您在反编译中找到的解决方案存在问题:因为它可能会发生变化。如果仅记录了某些额外内容,则您依赖于“隐藏”功能。第二条道路,但有相同的问题,然后一些,试图找到使用意图的其他代码(如stackoverflow问题)。