5

OSGi APIでは、BundleContext.getBundles()を呼び出すと、フラグメントであるかどうかに関係なく、すべてのバンドルが返されます。特定のBundleオブジェクトについて、これがフラグメントであるかどうかを判断するための最良の方法は何ですか?

4

3 に答える 3

9

最良の方法:

(bundle.adapt(BundleRevision.class).getTypes() & BundleRevision.TYPE_FRAGMENT) != 0

于 2012-07-25T21:47:17.423 に答える
4

考えられる1つの方法:Bundle.getHeaders()を使用してFragment-Hostヘッダーを探します。存在する場合、それはフラグメントです。

于 2012-07-25T17:30:31.263 に答える
1

OSGiコア仕様リリース4、バージョン4.2によると、PackageAdminバンドルに関する構造情報へのアクセスを提供するサービスもあります。たとえば、特定のバンドルがフラグメントであるかどうかを判別します。

import org.osgi.framework.Bundle;
import org.osgi.service.packageadmin.PackageAdmin;

PackageAdmin packageAdmin = ...; // I assume you know this

Bundle hostBundle = ...;         // I assume you know this
Bundle fragmentBundle = ...;     // I assume you know this

assertFalse(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(hostBundle);
assertEquals(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(fragmentBundle);

どうやら、OSGi 4.3では、PackageAdminサービスは非推奨org.osgi.framework.wiringになっているようで、パッケージに置き換える必要があります。

于 2013-04-04T14:43:06.327 に答える