AFAIK, вы не можете использовать DS для навязывания единой потребительской политики.
На первый взгляд ServiceFactory может работать, и если бы это было так, это было бы самым простымпуть.
Однако есть одно предостережение : "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.
Кэш фреймворка вполне может помешать и дать A кешированную S, даже если он думал, что он уже хранится в B.
Единственная альтернатива, о которой я могу подумать, это использовать FindHook хотя это немного более низкий уровень, и вы, вероятно, захотите реализовать другие хуки (EventHook, ListenerHook) для полноты.
Используя хуки, вы сможетемаскировать доступность услуг для других пакетов.Хотя, поскольку ваш хук будет удерживать состояние, вы захотите, чтобы он был в том же пакете, что и служба устройства, так что невозможно остановить ловушку без остановки пакета службы устройства.