我正在使用一个引用侦听器,在我的侦听器方法中使用Service,Dictionary参数。
Dictionary有一个service.id,然后我需要拥有该服务的Bundle。
我的问题是,拥有服务和服务ID,如何获得Bundle对象。
示例:
<reference-listener
bind-method="bindFormProcessor"
unbind-method="unbindFormProcessor"
ref="mainSvc"
>
</reference-listener>
我的Java方法
public void bindFormProcessor(IFormProcessor formProcessor,Dictionary dictionary) {
try {
Bundle bundle = OsgiUtil.getBundleByObject(dictionary.get("service.id"));
logger.info("************************ GOOOAAL " + bundle.getSymbolicName());
//Now, I have the bundle of my Service
} catch (Exception e) {
e.printStackTrace();
}
}
此致
答案 0 :(得分:2)
您可以将ServiceReference定义为bind方法的参数。通过使用它,您可以获得提供服务的包。
如果您不想将ServiceReference定义为参数类型(无论出于何种原因),您可以使用以下代码获取它:
ServiceReference serviceRef = bundleContext.getServiceReferences(IFormProcessor.class, "(service.id=" + serviceId + ")");