Получить экземпляр системного сервиса Android (например, AudioService)

Я знаю, что AudioManager предоставляет API для AudioService. Тем не менее, я хочу получить экземпляр класса AudioService.

Изучение источника показало, что AudioManager делает звонок на урок по удаленному сервису.

Я знаю, что AudioManager имеет поле "sService", но не является экземпляром AudioService, а является экземпляром BinderInternal, IIRC. Можно ли как-нибудь получить доступ к экземпляру AudioService? Или это совершенно невозможно из-за проблем безопасности?

1 ответ

Решение

Я полагаю, что вы можете легко получить ссылку на AudioService. Я думаю, что вы только что пропустили соответствующую часть кода:

private static IAudioService getService()
{
    if (sService != null) {
        return sService;
    }
    IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
    sService = IAudioService.Stub.asInterface(b);
    return sService;
}

Ты это видишь sService будет ссылка на IAudioService. Точно так же в вашем приложении вы можете получить прямую ссылку на IAudioService. Однако я не понимаю, почему вам может понадобиться это сделать.

Другие вопросы по тегам