如何定制自己的native service: example (C++)
来源:互联网 发布:知我网是正品吗 编辑:程序博客网 时间:2024/06/09 15:42
IMyService.h:
#ifndef MY_SERVICE_DEMO
#define MY_SERVICE_DEMO
#include <stdio.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <binder/IBinder.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
using namespace android;
namespace android
{
class IMyService: public IInterface {
public:
DECLARE_META_INTERFACE(MyService);
virtual void sayHello() = 0;
};
enum {
HELLO = IBinder::FIRST_CALL_TRANSACTION,
};
class BpMyService: public BpInterface<IMyService> {
public:
BpMyService(const sp<IBinder>& impl);
virtual void sayHello();
};
class BnMyService: public BnInterface<IMyService> {
public:
virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply,
uint32_t flags = 0);
virtual void sayHello();
};
}
#endif
IMyService.cpp:
#include "IMyService.h"
namespace android
{
IMPLEMENT_META_INTERFACE(MyService, "android.demo.IMyService");
// client
BpMyService::BpMyService(const sp<IBinder>& impl):BpInterface<IMyService>(impl)
{
}
// to implement client's sayhello method
void BpMyService::sayHello() {
printf("BpMyService::SayHello\n");
Parcel data, reply;
data.writeInterfaceToken(IMyService::getInterfaceDescriptor());
remote()->transact(HELLO, data, &reply);
printf("get num from BnService: %d\n", reply.readInt32());
}
//Server side: receive remote msg, and handle onTransact()
status_t BnMyService::onTransact(uint_t code, const Parcel& data,
Parcel* reply, uint32_t flags) {
switch(code) {
case HELLO:
printf("BnMyService:: got the client hello\n");
CHECK_INTERFACE(IMyService, data, reply);
sayHello();
reply->writeInt32(2016);
return NO_ERROR;
break;
default:
break;
}
return NO_ERROR;
}
// Server side: sayHello()
void BnMyService::sayHello() {
printf("BnMyService::sayHello\n");
};
}
ServerDemo.cpp:
#include "IMyService.h"
int main() {
sp <IServiceManager> sm = defaultServiceManager();
sm->addService(String16("service.myservice"), new BnMyService());
android::ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
return 0;
}
将名为”service.myservice”的BnMyService服务添加到ServiceManager,并启动服务
ClientDemo.cpp
#include "IMyService.h"
int main () {
sp <IServiceManager> sm = defaultServiceManager();
sp <IBinder> binder = sm->getService(String16("service.myservice"));
sp <IMyService> cs = interface_cast <IMyService> (binder);
cs->sayHello(); // Remote call
return 0;
}
编译好后,adb push到手机目录中/system/bin
之后开2个终端:
root@:/ # /system/bin/ServerDemo
BnMyService:: got the client hello
BnMyService::sayHello
root@:/ # /system/bin/ClientDemo
BpMyService::SayHello
get num from BnService: 2016
https://www.processon.com/view/link/583feda2e4b08e313590a25d
- 如何定制自己的native service: example (C++)
- 如何定制自己的java service: example
- 如何定制自己的native service: example2 (C++)
- 如何自己定制事件的API
- 如何自己定制事件的API
- 如何定制自己的窗体形状
- magento 如何定制自己的页面排版?
- 如何查看Android 中native的Service
- 如何查看Android 中native的Service
- 如何写一个native层的service
- 如何定制一个基于REST Service的ODBC驱动程序
- 如何定制一个基于REST Service的ODBC驱动程序
- 如何制作自己的Windows Service Pack
- Service如何关闭启动自己的Activity
- Service如何关闭启动自己的Activity
- 如何自己定制"发送到"
- 如何添加一个Native Service
- Java-如何定制自己的工具库: mytools or myutil
- Android关于SDCard存储
- 自定义控件学习总结【1】
- iOS 组件化方案探索
- vps ftp 快速安装教程
- 迷宫求解
- 如何定制自己的native service: example (C++)
- div清除浮动
- Omnigraffle Pro 6 Axure RP Pro MAC注册码许可证
- 根据commons-fileupload制作的个人上传工具类
- 关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
- Java实现算法导论中Pollard的rho启发式方法
- 第三章-无线传感网MAC协议
- 单例模式(Singleton)的6种实现
- 流程控制语句:循环语句-do while