Android – 如何获得所有可用的意图filter的列表?

我searchAndroid文档和一些疯狂的原因,我无法find所有可用的意图filter的列表。

我正在寻找一个意图filter,它会做类似的事情,通过广播接收器通知我一个特定的活动(例如浏览器或电子邮件)已经启动或在前台。 任何人都可以帮助我。

Solutions Collecting From Web of "Android – 如何获得所有可用的意图filter的列表?"

你不会find的。 意图filter是由应用程序定义的。 你必须看看你感兴趣的paritcular应用程序的文档。

PackageExplorer列出您的设备中的应用程序中定义的所有意图filter

要回答你的问题:你创build了你想用来使你的活动被选中,当一个程序正在寻找一个服务或活动的意图filter。 因此,包中的每个活动都定义了自己的意向filter列表。

我发现有一个由设备上的所有应用程序定义的所有意图filter的列表是有用的 – 所以知道当处理意图时系统将调用什么应用程序。 我在Android电子市场上放了一个免费的应用程序,search“包资源pipe理器”,search它可以在您的设备上find的所有应用程序,解码AndroidManifest.xml文件,并显示所有应用程序定义的所有意图filter列表。 所有意图filter的表可以按行动,类别,数据字段(即计划或mimetype),包名称或意图filtertypessorting,所以你可以find你的设备上的所有活动,以响应各种行动或类别。

包资源pipe理器还收集清单中的所有使用权限字段,并显示哪些应用程序需要哪些权限的列表。 所以你可以find所有使用“SEND_SMS”或类似的软件包。 点击一个包的名称将显示包的解码(未压缩的二进制)AndroidManifest.xml。

如果您closures设备,则可以运行以下命令:

adb shell dumpsys软件包r

这会给你一个所有静态注册的意图filter的列表。

(部分答案)IntentFilters在应用程序的.apk文件中包含的AndroidManifest.xml文件中定义。 (在 – > – > – > XML元素中,像这样:

我还没有find一个API来search设备上存储的所有.apk文件中定义的所有Intents。 系统search所有意图的列表:android.content.Context.startActivity(Intent intent)在android.app.ActivityManagerNative.startActivity()中使用进程间通信(IPC)机制调用本地方法(使用在“包裹”对象中的通知)来search意图并开始活动。 所以我可以find它是如何做到的

看起来你可以读取.apk文件(很多存储在/system/app/*.apk)。 .apk文件是一个.jar文件,AndroidManifest.xml文件是可用的,所以程序应该能够读取和parsing清单并findIntentFilters – 但是应该有API来使这个简单。

有GET_INTENTS_FILTER – 声明将来用于查询意图filter,另见http://code.google.com/p/android/issues/detail?id=3217

但是,Android团队的优先级很低。 有人提交补丁?

这个post是旧的,但任何人从应用程序安装在一个特定的android dwld这个上帝应用程序寻找清单信息:

https://play.google.com/store/apps/details?id=jp.susatthi.ManifestViewer

您可以在sdk / platforms / android-x / data / broadcast_actions.txt中检查标准动作和类别的列表

通过Tom Fraser的回答,最好的方法是通过grep和sort来使用dumpsys

 dumpsys activity broadcasts |grep -iE ".+\.[0-9A-Z_\-]+:$" |sort 

grepexpression式确保只捕获以intentforms结尾的行,如...blahblah.SOME_INTENT: 它可能并不全面,但这是一个好的开始。