我正在编写一个库,提供其他开发人员通过将其包含在项目中使用的服务。因此,我无法控制AndroidManifest.xml。我解释了在文档中做了什么,但是一个常见的问题是人们忽略了添加适当的< service />标记到他们的清单,或将其添加到错误的位置。
现在,当我的库调用startService而未在清单中声明服务时,唯一发生的事情是ActivityManager会记录一个警告。我希望在发生这种情况时抛出异常,以便开发人员知道如何解决它。如何检测清单是否实际声明了此服务?
答案 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应该满足您的要求。
您应该可以尝试找到该组件的服务信息。如果他们忘了把它放在清单中,就会抛出异常。您可以捕获此异常并将自己的信息提供给用户。