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());

}

我在追查音量设置问题是,从(1)追到(2)。就不知道怎么追查了,

grep -r setStreamVolumeIndex . 搜到AudioPolicyService。里面也有setStreamVolumeIndex这个函数,貌似会调用到这里。

打印log发现果然会走到这里,但是代码怎么走到这里的呢?这就须要我们了解binder原理。

例如以下图:是IBinder BpRefbase IInterface INTERFACE 之间关系图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFuZ3hpYW53ZW55ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

有了此图,尽管看不出binder是怎么实现的,可是我们就能大致binder是怎么利用的。

用setStreamVolumeIndex分析数据的流向。

例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFuZ3hpYW53ZW55ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

有一个关键点,就 是AudioPolicyService,是怎么传递到aps里面的mRemote里面的,它是通过重写interface_cast交货。

版权声明:本文博主原创文章。博客,未经同意不得转载。

最新文章

  1. UITextField 的重写
  2. SQL Server调优系列基础篇(索引运算总结)
  3. Delphi之DLL知识学习3---为什么要使用DLL
  4. Mariadb 10.1 joiner节点加入报错WSREP: Failed to prepare for incremental state transfer
  5. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
  6. MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别
  7. 进程process和线程thread的关系
  8. Java--常用类
  9. java制作简单的坦克大战
  10. sublime快捷键收藏
  11. 快速玩转Apple Pay开发
  12. struts2系列笔记(1)
  13. HBase在共享经济互联网业务的应用
  14. poj2689 Prime Distance题解报告
  15. cons-跨域请求
  16. JDK8之The type java.util.Map$Entry cannot be resolved
  17. h3c acl配置一列
  18. day037 行记录的操作
  19. 使用Jmeter测试Dubbo接口(参数设置篇)
  20. [.net]基元线程同步构造

热门文章

  1. 8.6 Android灯光系统_源码分析_背光灯
  2. EXCEL 学习笔记
  3. 【LeetCode-面试算法经典-Java实现】【096-Unique Binary Search Trees(唯一二叉搜索树)】
  4. 【48.51%】【poj 1611】The Suspects
  5. 想要搞BGM,没有歌曲链接怎么办?
  6. 使Sublime Text支持除UTF8外多种编码 - ConvertToUTF8
  7. ccpc2016长春站打铁记(后记)
  8. CGI原理解析之二------WEB服务和CGI交互数据
  9. bash keys
  10. [RxJSv&amp; Javascript] forkJoin (reactive Promise.all) &amp; Map