binder c++层 服务端回调客户端
sampleClient.cpp------------------------------------------------------------------------------------------------#include #include #include #include #include #include using namespace android;#ifdef LOG_TAG#undef LOG_TAG#endif#define LOG_TAG "sampleCallback"#define SAMPLE_SERIVCE_DES "sample.hello"#define SAMPLE_CB_SERIVCE_DES "android.os.SampleCallback"#define SRV_CODE 1#define CB_CODE 1class SampeCallback : public BBinder{     public:     SampeCallback()     {          mydescriptor = String16(SAMPLE_CB_SERIVCE_DES);     }     virtual ~SampeCallback() {               }     virtual const String16& getInterfaceDescriptor() const{           return mydescriptor;     }     protected:          void callbackFunction() {          LOGI( "Client callback function called-----------cb" );     }          virtual status_t onTransact( uint32_t code,               const Parcel& data,Parcel* reply,uint32_t flags = 0){          LOGD( "Client onTransact, code = %d", code);                       switch (code){           case CB_CODE:              callbackFunction();               break;           default:               return BBinder::onTransact(code, data, reply, flags);          }           return 0;     }     private:     String16 mydescriptor;};
int main(){     sp sm = defaultServiceManager();     sp ibinder = sm->getService(String16(SAMPLE_SERIVCE_DES));     if (ibinder == NULL){          LOGW( "Client can't find Service"" );           return -1;     }     Parcel _data,_reply;     SampeCallback *callback = new SampeCallback();     _data.writeStrongBinder(sp(callback));     int ret = ibinder->transact(SRV_CODE, _data, &_reply, 0);
//     ProcessState::self()->startThreadPool();//     IPCThreadState::self()->joinThreadPool();     while(1);     return 0;}
sampleService.cpp------------------------------------------------------------------------------------------------#include #include #include #include #include using namespace android;#ifdef LOG_TAG#undef LOG_TAG#endif#define LOG_TAG "sampleService"#define SAMPLE_SERIVCE_DES "sample.hello"#define SAMPLE_CB_SERIVCE_DES "android.os.SampleCallback"#define SRV_CODE 1#define CB_CODE 1class SampleService: public BBinder {public:     SampleService() {          mydescriptor = String16(SAMPLE_SERIVCE_DES);     }          virtual ~SampleService() {     }
     virtual const String16& getInterfaceDescriptor() const {           return mydescriptor;     }     protected:          void callFunction() {          LOGE( "Service callFunction-----------");     }          virtual status_t onTransact(uint32_t code, const Parcel& data,              Parcel* reply, uint32_t flags = 0) {          LOGD( "Service onTransact, code = %d" , code);           switch (code) {           case SRV_CODE:              callback = data.readStrongBinder();               if (callback != NULL)              {                   Parcel _data, _reply;                   _data.writeInterfaceToken(String16(SAMPLE_CB_SERIVCE_DES));                    int ret = callback->transact(CB_CODE, _data, &_reply, 0);              }              callFunction();               break;           default:               return BBinder::onTransact(code, data, reply, flags);          }           return 0;     }private:     String16 mydescriptor;     sp callback;};
int main() {     sp < IServiceManager > sm = defaultServiceManager();     SampleService* samServ = new SampleService();     status_t ret = sm->addService(String16(SAMPLE_SERIVCE_DES), samServ);     LOGD("Service addservice");     ProcessState::self()->startThreadPool();//     IPCThreadState::self()->joinThreadPool( true);     while(1);     return 0;}
Android.mk------------------------------------------------------------------------------------------------LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:= \       sampleClient.cpp
LOCAL_C_INCLUDES += \        $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \    libcutils \    libbinder \    libutils \    libhardware
LOCAL_CFLAGS := -DRIL_SHLIB
LOCAL_MODULE:= sampleClient
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:= \           sampleService.cpp
LOCAL_C_INCLUDES += \        $(LOCAL_PATH) \
LOCAL_SHARED_LIBRARIES : = \    libcutils \    libbinder \    libutils \    libhardware
LOCAL_CFLAGS := -DRIL_SHLIB
LOCAL_MODULE:= sampleService
include $(BUILD_EXECUTABLE)
------------------------------------------------1、新建文件夹binderSample2、将以上三个文件放入ics-4.x\external\binderSample3、编译,拷贝到开发环境中,chmod,然后各自运行  4、看log


更多相关文章

  1. Android之使用HttpPost提交数据到服务器(Android手机客户端和后台
  2. Android 客户端发送邮件(JMail方式)
  3. Android 博客园客户端 (二) 新界面&部分功能
  4. Socket Android手机客户端与PC服务端局域网内联测试
  5. BBC发布了android客户端应用
  6. Gradle离线配置、.android、.AndroidStudio、.gradle、.m2缓存文
  7. Android客户端上传文件,C#服务端接收文件
  8. android客户端利用sokcet通信和向Java服务端发请求,Java服务端把
  9. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到

随机推荐

  1. android ndk 调用第三方so
  2. NDK/JNI01--NDK下载配置
  3. Android(安卓)Binder机制分析
  4. Android(安卓)核心分析 之五基本空间划分
  5. Android培训班(46)
  6. Android如何通过https协议下载自己的http
  7. Android:手机扫描局域网所有ip,并进行sock
  8. Android中使用Gson解析JSON数据
  9. Cocos2d-x for android 使用Box2d报错解
  10. Android: 绘制的文本如何排版