android binder c++层 - 回调客户端服务 - 客户端(c++层) 调用 服务端(c++层) 例子,服务端回调客户端服务
16lz
2021-01-23
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
sampleClient.cpp------------------------------------------------------------------------------------------------#include
int main(){ sp
// ProcessState::self()->startThreadPool();// IPCThreadState::self()->joinThreadPool(); while(1); return 0;}
sampleService.cpp------------------------------------------------------------------------------------------------#include
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
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
更多相关文章
- Android之使用HttpPost提交数据到服务器(Android手机客户端和后台
- Android 客户端发送邮件(JMail方式)
- Android 博客园客户端 (二) 新界面&部分功能
- Socket Android手机客户端与PC服务端局域网内联测试
- BBC发布了android客户端应用
- Gradle离线配置、.android、.AndroidStudio、.gradle、.m2缓存文
- Android客户端上传文件,C#服务端接收文件
- android客户端利用sokcet通信和向Java服务端发请求,Java服务端把
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到