android binder c++层 - 回调客户端服务 - 客户端(c++层) 调用 服务端(c++层) 例子,服务端回调客户端服务
来源:互联网 发布:中国政法大学网络教育 编辑:程序博客网 时间:2024/05/16 14:16
binder c++层 服务端回调客户端
------------------------------------------------------------------------------------------------
#include <binder/IServiceManager.h>
#include <binder/IBinder.h>
#include <binder/Parcel.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <private/binder/binder_module.h>
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 1
class 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<IServiceManager> sm = defaultServiceManager();
sp<IBinder> 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<IBinder>(callback));
int ret = ibinder->transact(SRV_CODE, _data, &_reply, 0);
// ProcessState::self()->startThreadPool();
// IPCThreadState::self()->joinThreadPool();
while(1);
return 0;
}
sampleService.cpp
------------------------------------------------------------------------------------------------
#include <binder/IServiceManager.h>
#include <binder/IBinder.h>
#include <binder/Parcel.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
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 1
class 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<IBinder> 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、新建文件夹binderSample
2、将以上三个文件放入ics-4.x\external\binderSample
3、编译,拷贝到开发环境中,chmod,然后各自运行
4、看log 0 0
- android binder c++层 - 回调客户端服务 - 客户端(c++层) 调用 服务端(c++层) 例子,服务端回调客户端服务
- android binder c++层-客户端(c++) 调用 服务端(c++) 例子
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- zeroc ice 客户端与服务端通信例子(c++)
- 服务端基本步骤+客户端基本步骤+(协议层+传输层+服务端)类型
- WebService学习2:服务端发布服务、客户端调用服务
- C写的服务端与客户端
- C#:TcpClient(客户端) and TcpServer(服务端)
- C#socket通信(客户端和服务端)
- [C#]Debug客户端时,关联服务端代码
- C-socket编程-客户端服务端通信模型
- [C#] WebSocket 客户端+服务端 轻松实现
- 回显服务端/客户端
- 服务端+客户端 例子
- c++ 层实现binder服务例子
- WCF双工模式服务端回调客户端
- 客户端和服务端程序 server.c and client.c
- 求多边形面积
- class. isPrimitive() 8种基本类型的时候为 true,其他为false
- Java垃圾回收机制
- GDAL使用插件方式编译HDF4、HDF5以及NetCDF的bug修改
- C# 二维码生成和解析
- android binder c++层 - 回调客户端服务 - 客户端(c++层) 调用 服务端(c++层) 例子,服务端回调客户端服务
- Valgrind的使用方法
- [JAVA] java动态生成PDF文档
- Digital Roots
- 在js中动态创建表格
- Opencv图像数据类型
- Apple Watch人机交互指南:UI设计基础--动画、品牌化
- iOS防止键盘的遮挡
- Android资源文件简介