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

lac*_*ker 6 android android-manifest android-service android-xml android-library

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

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

Var*_*run 9

我想你应该在库中有一个上下文来做这件事.一个清洁的方式将查询packagemanagerintent要启动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;
}
Run Code Online (Sandbox Code Playgroud)


lac*_*ker 6

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