AllJoyn+Android+C++开发案例-android和windows跨设备跨平台调用方法
前面两个博客分别介绍了android的跨设备方法调用,windows的跨设备调用,这篇文章我们尝试着试下window和android设备间的跨平台方法调用。
我们让android端(JAVA)去跑service,让windows端(C++)跑client,client调用service的一个方法。
android端的代码和http://blog.youkuaiyun.com/jsjdtb356/article/details/51179564博客中是相同的,我们重点看一下总线接口定义和接口实现。如下:
总线接口:
package com.example.siemens.testgetmethod;
import org.alljoyn.bus.BusException;
import org.alljoyn.bus.annotation.BusInterface;
import org.alljoyn.bus.annotation.BusMethod;
@BusInterface (name = "org.my.interface.name")
public interface MyInterface {
// @BusMethod
// void show(String test) throws BusException;
// @BusMethod
// int add(int a,int b) throws BusException;
@BusMethod
String cat(String a,String b) throws BusException;
}
声明cat方法,传入两个String,传出一个String。
总线对象类实现总线接口:
class MyBusObject implements MyInterface,BusObject{
// public void show(String args){
// Toast.makeText(getApplicationContext(),args,Toast.LENGTH_SHORT).show(); //会调用的远程方法
//
// }
//
// public int add(int a,int b){ //会调用的远程方法
// return a+b;
// }
public String cat(String a,String b){
a=a.replace('H','T');
b=b.replace('W','B');
return a+b;
}
}
cat方法实现,替换第一个传入参数的H为T,替换第二个传入参数的W为B,返回拼接的字符串。
运行截图:
下面再来看看client的实现,client的代码试下和http://blog.youkuaiyun.com/jsjdtb356/article/details/51159752博客中完全一致,四个要与service一致的地方不要忘记改。对应着Java源码去改。
/*constants*/
static const char* INTERFACE_NAME = "org.my.interface.name"; //org.alljoyn.Bus.sample
static const char* SERVICE_NAME = "com.test.well.known.name"; //org.alljoyn.Bus.sample
static const char* SERVICE_PATH = "/myBusObject"; // /sample
static const SessionPort SERVICE_PORT = 42; //25
看看运行效果:
注意methodcall传入的两个参数分别是Hello和 World,这时已经处理成了Tello Borld,说明这时已经实现了,跨设备和跨平台的方法调用。
一直忘记掉说很重要的一点,client和service要连接到同一局域网中。至此已经实现了跨平台的方法调用,后面可以根据需求,改进调用的方法,将alljoyn嵌入到实际项目中去。