首页 > 代码库 > Android framework回顾(3)binder利用及IBinder BpRefbase IInterface INTERFACE 之间关系
Android framework回顾(3)binder利用及IBinder BpRefbase IInterface INTERFACE 之间关系
status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream, int index, audio_devices_t device){
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();//
if (aps == 0) return PERMISSION_DENIED;
return aps->setStreamVolumeIndex(stream, index, device); //(1)
}
virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index, audio_devices_t device){
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
data.writeInt32(static_cast <uint32_t>(stream));
data.writeInt32(index);
data.writeInt32(static_cast <uint32_t>(device));
remote()->transact(SET_STREAM_VOLUME, data, &reply);//(2)
return static_cast <status_t> (reply.readInt32());
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();//
if (aps == 0) return PERMISSION_DENIED;
return aps->setStreamVolumeIndex(stream, index, device); //(1)
}
virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index, audio_devices_t device){
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
data.writeInt32(static_cast <uint32_t>(stream));
data.writeInt32(index);
data.writeInt32(static_cast <uint32_t>(device));
remote()->transact(SET_STREAM_VOLUME, data, &reply);//(2)
return static_cast <status_t> (reply.readInt32());
}
我在追查音量设置问题是,从(1)追到(2),就不知道怎么追查了,
grep -r setStreamVolumeIndex . 搜到AudioPolicyService,里面也有setStreamVolumeIndex这个函数,貌似会调用到这里。
打印log发现果然会走到这里,可是代码怎么走到这里的呢?这就需要我们了解binder原理。
如下图:是IBinder BpRefbase IInterface INTERFACE 之间关系图。
有了此图,虽然看不出binder是怎么实现的,但是我们就能大致binder是怎么利用的。
用setStreamVolumeIndex分析数据的流向。
如下图:
有一个关键点,就 是AudioPolicyService,是怎么传递到aps里面的mRemote里面的,就是通过重写的interface_cast传递的。
Android framework回顾(3)binder利用及IBinder BpRefbase IInterface INTERFACE 之间关系
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。