知る限り、DS を使用して単一の消費者ポリシーを課すことはできません。
一見したところ、ServiceFactoryは機能する 可能性があり、機能する場合は最も簡単な方法です。
ただし、注意点が 1 つあります。
"The Framework caches the value returned (unless it is null), and will return the same service object on any future call to BundleContext.getService for the same bundle. This means the Framework must not allow this method to be concurrently called for the same bundle"
したがって、次のシナリオでは失敗すると思います。
Given Bundle A, Service S and Bundle B;
A gets S, then A ungets S, Bgets S, then A gets S.
フレームワークのキャッシュが干渉し、キャッシュされた S が既に B によって保持されている場合でも、A に与える可能性があります。
私が考えることができる唯一の代替手段は、FindHookを使用することですが、これはもう少し低レベルですが、完全を期すために他のフック(EventHook、ListenerHook) を実装することをお勧めします。
フックを使用すると、サービスの可用性を他のバンドルに隠すことができます。ただし、フックは状態を保持するため、デバイス サービスのバンドルを停止せずにフックを停止できないように、デバイス サービスと同じバンドルにする必要があります。