【问题标题】:How to get all intent filters for application (with root)如何获取应用程序的所有意图过滤器(使用根)
【发布时间】:2014-01-30 20:32:14
【问题描述】:

我正在开发一个系统应用程序,我需要以编程方式了解应用程序能够处理哪些意图。我见过与此相关的其他问题,但似乎没有一个问题有答案,而且似乎也不关心系统权限。

PackageManager 似乎只提供方法来查询给定意图的活动。我找不到获取给定活动意图的方法。

例如,如果我有一个具有这样定义的意图过滤器的活动:

<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>

而且我知道活动类名和包名,我想从包管理器(或任何其他来源)中了解它可以处理哪些意图(在本例中为BOOT_COMPLETEDUSER_PRESENT)。

【问题讨论】:

  • 只是在黑暗中拍摄 - 如果您有 root 权限,您可能会从已安装的应用程序中获取清单文件并解析它们(apk 文件只是 zip 文件)。如果您仍然感兴趣,我可以尝试检查这个想法是否有效。

标签: android android-intent


【解决方案1】:

好问题。我认为不可能找出应用程序可以处理的意图。 http://developer.android.com/reference/android/content/Intent.html 列出了一些标准活动操作和广播操作。如果您正在编写自己的应用程序并拥有自己的意图过滤器,那么我认为其他应用程序不会知道您的应用程序可以处理哪些意图,因为我相信没有办法将它们发布或向全世界宣布。

但有可能的是,您可以针对特定意图进行调用,如果返回 null,那么您可以确定设备上没有可以处理该特定意图的应用程序。

HTH。

【讨论】:

  • 当我看到你的回答时,我刚刚找到了一些相关信息。你是对的,目前似乎没有任何方法可以做到这一点。对于已知的 android 意图,您可以一次查询所有应用程序的所有意图,但对于如此简单的事情来说,这是很多工作。
  • @AndrewT。谢谢你证实了我的信念。没有很多标准,即已知的动作。因此,围绕它们循环不是问题。通常,如果任何应用程序或库的目的是允许其他应用程序使用它们的组件,它们都会提供文档。这是特别的。第 3 方 SDKS 的真实情况。可能,这就是为什么不存在您想要的“查询”模式的原因。
【解决方案2】:

所以在问了这个问题之后,我在这里找到了这个奇妙的答案:

Android — How to I get a list of all available intent filters?

这导致5 year old issue

因此,目前似乎没有任何方法可以做我想做的事情。如果它可用,我很想知道。

【讨论】:

    【解决方案3】:

    您可以尝试使用反编译器,例如“DexDump”(可在 GooglePlay 上获得),然后检索您想了解的应用程序的“AndroidManifest.xml”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      相关资源
      最近更新 更多