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

}

我在追查音量设置问题是,从(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" >

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

用setStreamVolumeIndex分析数据的流向。

例如以下图:

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

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

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

时间: 2024-10-09 20:49:36

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->set

Android Framework 记录之二

原文地址:http://blog.csdn.net/banketree/article/details/24982021 接着上次的记录,续写. 23.services目录 文件 描述 class AlarmManagerService extends IAlarmManager.Stub { //定时管理服务 public class AppOpsService extends IAppOpsService.Stub {  // 程序选项服务 public class AppsLaunchFa

Android Framework 分析---PackageManager 分析

在windowphone,ios和android中到目前为止,还是android的市场份额最大.个人认为除了google开源外,广大开发者早就了android的霸主地位.各位兄弟姐妹开发出各种各样的apk,才组成android的广阔天下.本篇主要分析一下android系统是针对处理这些apk的,主要涉及到pm这块的代码.分析这种底层服务,最好从android的开启启动流程中开始分析.因为这样才能更清楚的了解服务的启动流程. 1.在SystemServer.java 中启动PM android 开

如何从C++代码直接访问android framework层的WifiService

说到底,Java层的service就是就C++层的binder的封装,所以从原理上来讲通过C++代码直接访问android framework层的service是完全可能的,这篇文章以访问WifiService为例,讲解如何去实现这个功能. 费话少说,直接上代码: WifiTest.cpp #include <sys/types.h> #include <unistd.h> #include <grp.h> #include <binder/IPCThreadSt

怎样从C++代码直接訪问android framework层的WifiService

说究竟,Java层的service就是就C++层的binder的封装.所以从原理上来讲通过C++代码直接訪问android framework层的service是全然可能的,这篇文章以訪问WifiService为例,解说怎样去实现这个功能. 费话少说.直接上代码: WifiTest.cpp #include <sys/types.h> #include <unistd.h> #include <grp.h> #include <binder/IPCThreadSt

Android Framework中的线程Thread及它的threadLoop方法

当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了若干个Thread.它们普遍的特点就是有一个threadLoop方法.按照字面的意思应该是这个线程能够循环处理数据.对应我想到到了java上层中的HandlerThread,这个估计也差不多,但当时心里总有一个疙瘩,想弄清楚它到底是怎么循环起来的. Android中java世界的Thread 先来看看java是怎么创建一个线程的.这个是最舒服的,也是我最熟悉的. new Thread(new Runnabl

[Android][Framework]Activity启动流程

开始 从Launcher点击一个App图标,会触发如下动作: LauncherActivity.java protected void (ListView l, View v, int position, long id) { Intent intent = intentForPosition(position); startActivity(intent);} 走到了 Activity.java 的startActivity相关方法: public void startActivity(Int

Android Framework 分析---消息机制Native层

在Android的消息机制中,不仅提供了供Application 开发使用的java的消息循环.其实java的机制最终还是靠native来实现的.在native不仅提供一套消息传递和处理的机制,还提供了自定义文件描述符的I/O时间的监听机制.下面我们从具体代码中分析一下. Native层的关键类: Looper.cpp.该类中提供了pollOnce 和wake的休眠和唤醒机制.同时在构造函数中也创建 管道 并加入epoll的机制中,来监听其状态变化. Looper::Looper(bool al

Android系统篇之----Binder机制和远程服务调用机制分析

一.前景概要 最近要实现Android中免注册Activity就可以运行的问题,那么结果是搞定了,就是可以不用在AndroidManifest.xml中声明这个Activity即可运行,主要是通过骗取系统,偷龙转凤技术的,这个知识点后面会详细讲解的,因为在研究了这个问题过程中遇到了很多知识点,当然最重要也是最根本的就是Android中的Binder机制和远程服务调用机制,而关于Binder机制的话,在Android中算是一个非常大的系统架构模块了,光这篇文章是肯定不能讲解到全部的,而且本人也不是