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