android binder - 客户端(java层) 调用 服务端(c++层) 例子
来源:互联网 发布:淘宝搜索店铺名找不到 编辑:程序博客网 时间:2024/05/18 09:09
客户端是Android程序和服务端采用C++程序编写
客户端新建一个Android程序,在包名 com.example.client3下有文件,如下
MainActivity.java
----------------------------------------------------------------------------------------------------------
package com.example.client3;
import android.app.Activity;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private static final java.lang.String DESCRIPTOR = "sample.hello";
private static final int FUNC_CALLFUNCTION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "Client oncreate ");
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
IBinder b = ServiceManager.getService(DESCRIPTOR);
try {
_data.writeInterfaceToken(DESCRIPTOR);
b.transact(FUNC_CALLFUNCTION, _data, _reply, 0);
_reply.readException();
_reply.readInt();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
_reply.recycle();
_data.recycle();
}
}
}
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 main addservice ");
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:= \
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、先编译好服务,然后将服务跑起来
2、运行android程序,抓log
0 0
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- android binder c++层-客户端(c++) 调用 服务端(c++) 例子
- android binder c++层 - 回调客户端服务 - 客户端(c++层) 调用 服务端(c++层) 例子,服务端回调客户端服务
- Android------Binder java层浅析
- android中c++层binder简单例子
- Android java层和C层的相互调用
- Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)
- android binder机制---Java层获取ServiceManager
- Java 层Binder的使用(Android framework)
- Android java层binder解析1
- Android java层binder解析 2
- Android------Binder java层如何与native层交互
- Android Framework:Binder(6)-Java层Service的注册及跨进程调用
- Android JNI之JAVA调用C/C++层
- Android Binder 框架层详解
- Java层Binder机制详解
- Binder java层实现原理
- hibernage 报不能转换成 对象
- 关于Zernike矩
- Insertion Sort List(leetcode)
- MyEclipse基本设置
- android 常用的命令和工具
- android binder - 客户端(java层) 调用 服务端(c++层) 例子
- 2014世界互联网乌镇峰会 马云演讲实录
- C#DateTimePicker用法
- app第一次运行滑动视图
- 第十二周上机项目2--(2)分离正整数中的各位数
- spark 的WholeTextFile使用以及文件路径
- 多态
- iMX283学习笔记(1)
- hogan scarpe Jilin University postgraduate courses to learn and master's degree in economics.After