如何以编程方式检查是否在AndroidManifest.xml中声明了服务?

时间:2011-06-30 01:25:01

标签: android android-manifest android-service android-xml android-library

我正在编写一个库,提供其他开发人员通过将其包含在项目中使用的服务。因此,我无法控制AndroidManifest.xml。我解释了在文档中做了什么,但是一个常见的问题是人们忽略了添加适当的< service />标记到他们的清单,或将其添加到错误的位置。

现在,当我的库调用startService而未在清单中声明服务时,唯一发生的事情是ActivityManager会记录一个警告。我希望在发生这种情况时抛出异常,以便开发人员知道如何解决它。如何检测清单是否实际声明了此服务?

3 个答案:

答案 0 :(得分:9)

我猜你应该在库中有一个上下文来执行此操作。更简洁的方法是查询packagemanager intent,以便service启动public boolean isServiceAvailable(Context context, String action) { final PackageManager packageManager = context.getPackageManager(); final Intent intent = new Intent(context, MyService.class); List resolveInfo = packageManager.queryIntentServices(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resolveInfo.size() > 0) { return true; } return false; }

{{1}}

答案 1 :(得分:5)

有点愚蠢让我忽略这一点,但如果找不到这样的服务,startService()将返回null,否则返回ComponentName。这对我来说是最简单的方式。看起来使用PackageManager也可以。

答案 2 :(得分:1)

PackageManager知道安装了哪些服务,活动和其他内容。我没有广泛使用它,但我相信getServiceInfo应该满足您的要求。

您应该可以尝试找到该组件的服务信息。如果他们忘了把它放在清单中,就会抛出异常。您可以捕获此异常并将自己的信息提供给用户。