android binder c++層-客戶端(c++) 呼叫 服務端(c++) 例子
客戶端和服務端都採用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,然後各自執行
相關文章
- 簡單的C++檔案伺服器--Linux C++客戶端從服務端獲取檔案C++伺服器Linux客戶端服務端
- Android Binder實現示例(C/C++層)AndroidC++
- 理解 Android Binder 機制(二):C++層AndroidC++
- Android C++層使用Binder通訊的方法AndroidC++
- c++ binderC++
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- C++程式碼實現一個簡易http服務端,返回給客戶端一張圖片C++HTTP服務端客戶端
- 高效能 C++ HTTP 客戶端原理與實現C++HTTP客戶端
- 求一段python3服務端及客戶端的例子Python服務端客戶端
- Windows 下 c++ 呼叫 Rust 庫的例子WindowsC++Rust
- 服務端渲染和客戶端渲染服務端客戶端
- 使用Golang搭建gRPC服務提供給.NetCore客戶端呼叫GolangRPCNetCore客戶端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- Windows10 VS2017 C++ Server Socket簡單伺服器端與客戶端WindowsC++Server伺服器客戶端
- 交叉編譯c++給android呼叫編譯C++Android
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- 全面總結: Golang 呼叫 C/C++,例子式教程GolangC++
- Dubbo原始碼解析之客戶端初始化及服務呼叫原始碼客戶端
- Java與WCF互動(一):Java客戶端呼叫WCF服務 (轉)Java客戶端
- macOS 自帶的ftp服務端&vnc客戶端MacFTP服務端VNC客戶端
- rsync備份【基於客戶端與服務端】客戶端服務端
- 埃森哲:端到端客戶服務報告
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- C++呼叫LuaC++
- android層java如何呼叫cocos2dx c++程式碼 步驟AndroidJavaC++
- 基於Microsoft visual c++ 6.0實現客戶端HTTP的Get、Post請求ROSC++客戶端HTTP
- vscode遠端除錯c++VSCode除錯C++
- C++【string】用法和例子C++
- C++【vector】用法和例子C++
- 使用Apollo Server搭建GraphQL的服務端和客戶端Server服務端客戶端
- 服務端如何獲取客戶端請求IP地址服務端客戶端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- MQTT協議從服務端到客戶端詳解MQQT協議服務端客戶端
- Eureka高可用叢集服務端和客戶端配置服務端客戶端
- 微服務架構,客戶端如何catch服務端的異常?微服務架構客戶端服務端
- Mqtt開發筆記:windows下C++ ActiveMQ客戶端介紹、編譯和使用MQQT筆記WindowsC++客戶端編譯
- C++呼叫C介面C++