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,然後各自執行
相關文章
- binder通訊例項之c++客戶端與c++服務端C++客戶端服務端
- zeroc ice 客戶端與服務端通訊例子(c++)客戶端服務端C++
- 【2】Windows C++ Redis服務端搭建與客戶端開發WindowsC++Redis服務端客戶端
- C++客戶端程式(socket)C++客戶端
- c++ 層實現binder服務樣例C++
- 簡單的C++檔案伺服器--Linux C++客戶端從服務端獲取檔案C++伺服器Linux客戶端服務端
- .Net Remoting服務端與客戶端呼叫示例REM服務端客戶端
- 理解 Android Binder 機制(二):C++層AndroidC++
- Android Binder實現示例(C/C++層)AndroidC++
- Android C++層列印呼叫棧AndroidC++
- Android C++層使用Binder通訊的方法AndroidC++
- Android實現Thrift服務端與客戶端Android服務端客戶端
- c++ binderC++
- SSLSocket實現服務端和客戶端雙向認證的例子服務端客戶端
- 高效能 C++ HTTP 客戶端原理與實現C++HTTP客戶端
- 跨平臺 C/C++ memcached 客戶端 memcacheclient 介紹C++客戶端client
- 模板,從服務端到客戶端服務端客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- 求一段python3服務端及客戶端的例子Python服務端客戶端
- binder c++ 類C++
- android客戶端與服務端互動的三種方式Android客戶端服務端
- ZooKeeper服務發現客戶端客戶端
- Android實時獲得經緯度,傳送給c++服務端AndroidC++服務端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- C++ binder 實現C++
- Windows 下 c++ 呼叫 Rust 庫的例子WindowsC++Rust
- macOS 自帶的ftp服務端&vnc客戶端MacFTP服務端VNC客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- Rest Post示例(java服務端、python客戶端)RESTJava服務端Python客戶端
- 使用多種客戶端消費WCF RestFul服務(一)——服務端客戶端REST服務端
- PC客戶端安全測試服務客戶端
- Java與WCF互動(一):Java客戶端呼叫WCF服務 (轉)Java客戶端
- Dubbo原始碼解析之客戶端初始化及服務呼叫原始碼客戶端
- !請教:java NIO編寫服務端,C++編寫客戶端,二者採用自定義資料包資料通訊Java服務端C++客戶端
- 服務端渲染vs客戶端渲染到前後端同構服務端客戶端後端
- 使用Apollo Server搭建GraphQL的服務端和客戶端Server服務端客戶端