Android aidl最终是通过c++实现,所以我们可以通过c++ 调用java层的系统服务。

首先我们需要一个继承自IInterface的代理接口类IXXXService:

class IXXXService : public IInterface{const String16 SERVICE_DESCRIPTOR("com.xxx.IXXXService");protected:enum{Fun1 = IBinder :: FIRST_CALL_TRANSACTION+ 0,};}

其中SERVICE_DESCRIPTOR对应着,Fun1对应着IXXXService.java里面的android.os.IBinder.FIRST_CALL_TRANSACTION + 0所代表的函数,我们不必实现所有IXXXService.java里面的函数。

接着我们根据这个接口创建一个BpINTERFACE类,并实现函数的调用:

class BpXXXService : public BpInterface{    ... Fun1(...){        Parcel data, reply;        data.writeInterfaceToken(SERVICE_DESCRIPTOR);        //写数据进data        //data->write...();        ...        remote()->transact(Fun1,data,&reply);        if(0==reply->readExceptionCode()){            //读取返回的数据,如果需要的话            //result = reply->read...();        }        return ...;    }}

具体需要写进的数据和读取的数据依据具体的接口定义,可以参考IXXXService.java具体的函数实现,再通过android_os_Parcel.cpp找到对应的c++实现。

假如我们需要调用自己的aidl函数,只需要将我们的服务通过ServiceManager的addService方法将服务加到systemService便可通过上述方法调用了。

更多相关文章

  1. IPCThreadState 详解
  2. 网络请求工具类WebServiceUtils
  3. android 网络状态
  4. android service 学习 一
  5. delphi xe5 android 开发数据访问手机端(二)
  6. 聊聊Android应用实现跨进程调用
  7. Android(安卓)连接Mysql数据库步骤(新手步骤)
  8. android 导出带数据库文件的APK
  9. 退出 android 应用程序

随机推荐

  1. 【Android学习入门】Android studio基本
  2. dev android project from cmd
  3. Android google地图开发的前期准备(MD5和
  4. Android(安卓)图片平铺效果
  5. android技术开发例子,解析以及源码集锦
  6. android LinearLayout布局子空间没有填充
  7. android 获取控件真实高度
  8. Android多国语言文件夹命名
  9. Android(安卓)项目无法生成R文件解决办法
  10. Android当中的SeekBar与iOS中的UISlider