Android binder通信实例
2017-03-29 15:58
405 查看
server端代码:
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -O2 -g
LOCAL_SRC_FILES := server.cpp
LOCAL_SHARED_LIBRARIES = libdl libcutils libutils libbinder
LOCAL_C_INCLUDE := $(TOP)/frameworks/base/include
LOCAL_MODULE := server_test
LOCAL_MODULE_TAGS:= optional
LOCAL_CFLAGS += -Wno-unused-parameter -Werror
include $(BUILD_EXECUTABLE)
client端代码如下:
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -O2 -g
LOCAL_SRC_FILES := client.cpp
LOCAL_SHARED_LIBRARIES = libdl libcutils libutils libbinder
LOCAL_C_INCLUDE := $(TOP)/frameworks/base/include
LOCAL_MODULE := client_test
LOCAL_MODULE_TAGS:= optional
LOCAL_CFLAGS += -Wno-unused-parameter -Werror
include $(BUILD_EXECUTABLE)
#include <stdio.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <sys/mman.h> #include <utils/RefBase.h> #include <binder/IInterface.h> #include <binder/Parcel.h> #include <utils/threads.h> #include <cutils/log.h> #include <cutils/properties.h> #include <binder/IServiceManager.h> #include <binder/IPCThreadState.h> using namespace android; namespace android { enum{ CALCULATE_MUL_NUM=0, CALCULATE_DIV_NUM }; class MyServer:public BBinder { public: MyServer(); virtual ~MyServer(); static int instantiate(); virtual status_t onTransact(uint32_t, const Parcel&, Parcel*, uint32_t); void parse_edid(void); int DeviceInit(void); void UpdateSurface(void); private: mutable Mutex mLock; }; int MyServer::instantiate() { int tTempRet=defaultServiceManager()->addService(String16("service.damon"), new MyServer()); ALOGD("damon ===> server instantiate : %d \n", tTempRet); return tTempRet; } MyServer::MyServer() { ALOGD("damon ===> create server !\n"); } MyServer::~MyServer() { ALOGD("damon ===> destroy server !\n"); } status_t MyServer::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { // ALOGD("damon ===> server onTransact code = %d ", code); Mutex::Autolock _l(mLock); switch(code) { case CALCULATE_MUL_NUM: { int a=data.readInt32(); int b=data.readInt32(); int tTempSum=a*b; ALOGD("damon ===> server mul = %d %d %d \n", a, b, tTempSum); reply->writeInt32(tTempSum); return NO_ERROR; } break; case CALCULATE_DIV_NUM: { int a=data.readInt32(); int b=data.readInt32(); int tTempSum=a/b; ALOGD("damon ===> server div = %d %d %d \n", a, b, tTempSum); reply->writeInt32(tTempSum); return NO_ERROR; } break; case 0x10: { } break; default: return BBinder::onTransact(code, data, reply, flags); } return 0; } } int main(int argc, char *argv[]) { srand(time(NULL)); sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm=defaultServiceManager(); ALOGD("damon ===> ServiceManager: %p", sm.get()); MyServer::instantiate(); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); return 0; }
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -O2 -g
LOCAL_SRC_FILES := server.cpp
LOCAL_SHARED_LIBRARIES = libdl libcutils libutils libbinder
LOCAL_C_INCLUDE := $(TOP)/frameworks/base/include
LOCAL_MODULE := server_test
LOCAL_MODULE_TAGS:= optional
LOCAL_CFLAGS += -Wno-unused-parameter -Werror
include $(BUILD_EXECUTABLE)
client端代码如下:
#include <cutils/log.h> #include <cutils/properties.h> #include <binder/IServiceManager.h> #include <binder/IPCThreadState.h> using namespace android; enum{ CALCULATE_ADD_NUM=0, CALCULATE_SUB_NUM }; enum{ CALCULATE_MUL_NUM=0, CALCULATE_DIV_NUM }; int main(int argc, char *argv[]) { sp<IBinder> tTempServerBinder; Parcel data, reply; int tTempSum=0; ALOGD("damon ===> client main is call ....."); sp<IServiceManager> sm=defaultServiceManager(); while(1) { tTempServerBinder=sm->getService(String16("service.damon")); ALOGD("damon ===> client get service : %p", sm.get()); if(tTempServerBinder==0) { ALOGD("damon ===> test service not published, waiting . . ."); usleep(1000*1000); continue; }else { ALOGD("damon ===> get service success! "); break; } } data.writeInt32(3); data.writeInt32(5); ALOGD("damon ===> create remote !\n"); tTempServerBinder->transact(CALCULATE_MUL_NUM, data, &reply); tTempSum=reply.readInt32(); ALOGD("damon ===> client calculate mul num : %d ", tTempSum); data.freeData(); data.writeInt32(5); data.writeInt32(3); tTempServerBinder->transact(CALCULATE_DIV_NUM, data, &reply); tTempSum=reply.readInt32(); ALOGD("damon ===> client calculate div num : %d \n", tTempSum); return 0; }
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -O2 -g
LOCAL_SRC_FILES := client.cpp
LOCAL_SHARED_LIBRARIES = libdl libcutils libutils libbinder
LOCAL_C_INCLUDE := $(TOP)/frameworks/base/include
LOCAL_MODULE := client_test
LOCAL_MODULE_TAGS:= optional
LOCAL_CFLAGS += -Wno-unused-parameter -Werror
include $(BUILD_EXECUTABLE)
相关文章推荐
- [转]android jni层binder使用/进程通信实例
- 实例分析android中的Binder通信机制(3)
- 【代码】android软件开发 Service Binder交互通信实例
- Android Service Binder交互通信实例
- Android Service Binder交互通信实例
- 实例分析android中的Binder通信机制(2)
- 实例分析android中的Binder通信机制(1)
- 客户端(android)和服务器端(swing) Scoket通信实例
- Android 程式开发:(三)初识Fragment —— 3.4fragments实例之间的通信
- linux特权级, linux通信机制, Dalvik, android binder
- Android中实现native服务利用binder与应用通信
- Android网络通信之蓝牙教程实例汇总
- android手机通过串口蓝牙透传模块与AVR单片机通信实例。。。蓝牙服务程序案例
- Android Java Binder 通信机制
- Binder---- Android 的IPC 通信机制
- binder 通信实例
- Android Binder机制の设计与实现1-3(引言/面向对象的 Binder IPC/Binder 通信模型)
- Android smack和openfire通信的小实例
- android Binder 实例
- android IPC之binder通信机制