binder小例子
来源:互联网 发布:创新的社会网络 编辑:程序博客网 时间:2024/06/07 02:27
ITest.h
#ifndef ANDROID_ITEST_H
#define ANDROID_ITEST_H#include <utils/Errors.h> // for status_t
#include <utils/KeyedVector.h>
#include <utils/RefBase.h>
#include <utils/String8.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
namespace android {
class ITest: public IInterface
{
protected:
enum
{
TEST_GETTEST = 0,
TEST_SETTEST,
};
public:
DECLARE_META_INTERFACE(Test); //声明重要宏定义
//定义纯虚函数
virtual void getTest() = 0;
virtual void setTest() = 0;
};
//BnTest 声明
class BnTest: public BnInterface<ITest>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
};
class TestService: public BnTest
{
public:
static void instantiate();
//static char const* getServiceName() { return "test.service"; }
//服务端实现接口函数
virtual void getTest();
virtual void setTest();
};
// ----------------------------------------------------------------------------
}; // namespace android
#endif // ANDROID_ITEST_H
//binder的思路是,首先我们需要一个IXXX类,然后bp和bn分别继承自这个类,这两个类都必须要实现IXXX类中的方法(自己定义的一些方法),bp实现是用于使用者调用,而bn实现是用于——没用(只是基类里面是虚函数,必须要实现),
ITest.cpp
#include <sys/types.h>
#include <unistd.h>
#include <cutils/log.h>
#include <binder/IServiceManager.h>
#include <binder/IPCThreadState.h>
#include "ITest.h"
namespace android {
//BpTest实现
class BpTest : public BpInterface<ITest>
{
public:
BpTest(const sp<IBinder>& impl): BpInterface<ITest>(impl)
{
}
virtual void getTest()
{
Parcel data,reply;
data.writeInterfaceToken(ITest::getInterfaceDescriptor());
//TODO... 使用类似的writeXXX函数
remote()->transact(TEST_GETTEST,data,&reply);
int ret = reply.readInt32();
return ;
}
virtual void setTest()
{
Parcel data,reply;
data.writeInterfaceToken(ITest::getInterfaceDescriptor());
//TODO... 使用类死的writeXXX函数
remote()->transact(TEST_SETTEST,data,&reply);
int ret = reply.readInt32();
return ;
}
};
//BnTest实现
//重要的一个定义实现
IMPLEMENT_META_INTERFACE(Test, "android.Test.ITest");
status_t BnTest::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
switch(code){
case TEST_GETTEST:{
CHECK_INTERFACE(ITest, data, reply);
getTest();
}break;
case TEST_SETTEST:{
CHECK_INTERFACE(ITest, data, reply);
setTest();
}break;
default:
break;
}
return 0;
}
// ----------------------------------------------------------------------
void TestService::getTest()
{
printf("getTest----------------!\n");
}
void TestService::setTest()
{
printf("setTest----------------!\n");
}
void TestService::instantiate() {
defaultServiceManager()->addService(
String16("test.service"), new TestService());
}
}
bn端必须要实现onTransact这个方法,因为正是这个方法在和bp端通讯,bp端remote()->transact()这个方法在bn端由onTransac这个方法在处理(里面具体怎么弄,你可以返回说“你很帅‘……我的代码里面是调用了实现IXXX类的方法)这样bp和bn就可以通讯了,下面要做的就是注册servers和获取bp端了。
- binder小例子
- 小例子
- c++ 层实现binder服务例子
- android中c++层binder简单例子
- Android笔记五(Binder例子)
- C++实现的binder通讯小程序
- binder
- binder
- binder
- Binder
- binder
- binder
- Binder
- binder
- binder
- Binder
- Binder
- Binder
- lua manual翻译——第三章第三、四节 堆栈操作
- 云存储——asus webstorage
- 最好使用C++转型操作符
- Andoid - 开发实例(5):上传文件实现方法
- 贝叶斯分类器--原理流程应用
- binder小例子
- 微信开放了server端,互联网小站商业模式突破的福音
- spring注入问题
- net错误:Process performance counter is disabled,so the requested operation cannot be performed
- Javascript 给页面元素添加事件函数探讨
- Java/PHP/C ... 几种语言 RSA 的互操作
- MPEG-2 数字视频技术参考指南 (1) —— 前言
- lua语言入门之Sublime Text设置lua的Build System
- Java.WebService - Webservice初体验之调用学院客户端开放接口