App A可以通过显式意图启动App B中的组件吗?
我知道明确意图的一般用法是在同一个应用程序中启动一个组件。隐含意图用于跨越流程边界。
情景:
App A使用 PackageManager API用于标识App B(定义了" foo"的应用程序)
App A可以通过明确意图启动App B中的组件吗?
我不认为这是可能的,因为明确的意图需要 - 应用程序包和组件名称。
if(PackageManager.PERMISSION_GRANTED == packageManager .checkPermission("富&#34 ;, pk.packageName))
results.add("包名:" + pk.applicationInfo.packageName +"类名: &#34 + pk.applicationInfo.classNa); }
类名为null。因此,根据我的理解,仅通过依赖PackageManager API,就无法通过显式意图进行应用程序间通信。在Android 5中,您只能通过显式意图调用AIDL服务,但在开发时调用者需要知道暴露AIDL的应用程序的包和组件名称。我的理解是否正确?
答案 0 :(得分:1)
App A可以在App B中启动一个组件吗?
App A可以试试。 App A是否会成功取决于几个方面,包括是否导出组件以及组件是否受权限保护。
我不认为这是可能的,因为明确的意图需要 - 应用程序包和组件名称。
应用程序ID和组件名称都是字符串。应用可以使用字符串。正确获取应用程序ID和组件名称可能需要一些工作,具体取决于App A和App B之间的关系。
作为反例,在Android 5.0+上绑定到服务的唯一方法是通过显式Intent
。因此,如果App A希望绑定到App B导出的服务,App A别无选择,只能创建一个明确的Intent
。
答案 1 :(得分:0)
没办法。如果你想要启动应用程序之外的东西,你必须声明一个隐含的意图。否则android将在你的包中找到它,可能不会找到任何东西并崩溃。
答案 2 :(得分:0)
来自文档:
您通常会使用明确的意图来启动您的组件 自己的应用程序,因为您知道活动或服务的类名 你想要开始。
在"意图类型" - http://developer.android.com/guide/components/intents-filters.html
所以,通常你不会......但是你可以做到这一点,但这并不简单。要创建正确的显式意图,您将需要应用程序上下文和类。
获取另一个应用程序的上下文:
createPackageContext (String packageName, int flags)
对于课程,您可以申请“活动”。和'服务'包管理器中的类。您也可以尝试使用反射。您还可以使用包的完全限定字符串名称并假设它是正确的和/或不会更改。如果需要,可以在应用程序中包含该类的存根,从而获得对它的引用(如果您可以访问源或存根库)。
如果有权限限制,则需要请求权限。