获取Android系统服务实例(例如AudioService)

获取Android系统服务实例(例如AudioService),android,service,system,aidl,Android,Service,System,Aidl,我知道AudioManager为AudioService提供API。然而,我想要的是获取AudioService类的实例 研究来源显示AudioManager在远程服务中调用类 我知道AudioManager有一个字段“sService”,但它不是AudioService的实例,而是BinderInternal,IIRC的实例。我能以某种方式访问AudioService实例吗?或者因为安全问题,这是完全不可能的?我想您可以很容易地获得AudioService的参考。我认为您刚刚错过了代码的适当部

我知道AudioManager为AudioService提供API。然而,我想要的是获取AudioService类的实例

研究来源显示AudioManager在远程服务中调用类


我知道AudioManager有一个字段“sService”,但它不是AudioService的实例,而是BinderInternal,IIRC的实例。我能以某种方式访问AudioService实例吗?或者因为安全问题,这是完全不可能的?

我想您可以很容易地获得AudioService的参考。我认为您刚刚错过了代码的适当部分:

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

您可以看到,
s服务
将是对IAudioService的引用。类似地,在应用程序中,可以直接引用IAudioService。但是,我不明白您为什么需要这样做。

这不是我想要的。IAudioService只是一个活页夹,我不需要活页夹-我需要一个AudioService类的对象:与此服务交互的唯一可能方式是通过活页夹,因为它在单独的进程中运行,并且只有活页夹被管理来封送您对此服务的调用。因此,如果您想直接更改AudioService中的值,您不能这样做。谢谢。这正是我所想的-我想也许我可以通过某种欺骗/利用本机代码来实现这一点,但这似乎是不可能的。不幸的是,不可能,否则您将能够在系统中执行任何操作,因为系统服务也按照此模型工作。您只能访问AIDL接口中定义的方法。好吧,我不认为这是不幸的:)否则,如果任何人都可以轻松访问它们,安全系统将一事无成。非常感谢。