客户端和服务端都采用C++程序编写
sampleClient.cpp
-------------------------------------------------------------------
#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 FUNC_CALLFUNCTION 1
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;
int ret
= ibinder->transact(FUNC_CALLFUNCTION, _data, &_reply, 0);
LOGD( "Client transact
return %d", ret);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
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 FUNC_CALLFUNCTION 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 FUNC_CALLFUNCTION:
callFunction();
break;
default:
return BBinder::onTransact(code,
data, reply, flags);
}
return 0;
}
private :
String16 mydescriptor;
};
int main() {
sp < IServiceManager > sm = defaultServiceManager();
SampleService* samServ = new SampleService();
status_t ret = sm->addService(String16(SAMPLE_SERIVCE_DES), samServ);
LOGD( "Service addservice return %d",
ret);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool( true);
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,然后各自运行