LAN-COMM,即LAN Communicate,局域网通讯技术,基于同一局域网下的设备,相互发现与通讯。
LAN-COMM主要用于在同一局域网下的设备之间的相互发现与通讯。 您可以:
- 主动搜索位于同一局域网下的同一设备;
- 通过开关控制是否被其他设备搜索到;
- 给处于同一局域网下的所有设备发送广播消息;
- 给指定设备发送点对点消息;
- 监听广播消息、监听点对点消息;
- 监听其他设备上下线通知消息;
demo示例:
通过LanCommManager.getSearcher()您可以获取LAN-COMM的搜索器,通过搜索器,您可以主动搜索当前局域网下的所有设备。
也可以通过开关配置是否可以被其他设备搜索到。
搜索其他的设备:
LanCommManager.getSearcher().startSearch(new SearchListener() {
@Override
public void onSearchStart() {
//开始搜索
}
@Override
public void onSearchedNewOne(Device device) {
//搜索到设备
Log.d(TAG, "onSearchedNewOne() " + device.toString());
}
@Override
public void onSearchFinish(HashMap<String, Device> devices) {
//搜索完成
//devices为搜索到的所有设备,它的key为此设备的IP地址
}
});
设置是否可以被其他设备搜索
//设置可以被其他设备搜索
LanCommManager.getSearcher().setCanBeSearched(true);
//设置不能被其他设备搜索
LanCommManager.getSearcher().setCanBeSearched(false);
当前是否可以被其他设备搜索
boolean canBeSearch = LanCommManager.getSearcher().isCanBeSearched();
通过LanCommManager.getReceiver(); 您可以获取到LAN-COMM的消息接收器,通过接收器,可以接收到其他设备发送的广播消息和点对点消息,以及其他设备上下线的通知消息。
接收与不接收其他设备发送的广播消息和点对点消息
DataListener listener = new DataListener() {
@Override
public void onBroadcastArrive(CommData commData) {
//接收到广播消息
}
@Override
public void onCommandArrive(CommData commData) {
//接收到点对点消息
}
};
//接收其他设备发送的广播消息和点对点消息
LanCommManager.getReceiver().addDataListener(listener);
//移除其他设备发送的广播消息和点对点消息的监听
LanCommManager.getReceiver().removeDataListener(listener);
通过LanCommManager.Broadcaster(); 您可以获取到LAN-COMM的广播器,通过广播器,可以给所有设备发送广播消息。
通过广播器发送的消息,可以在[2.2 消息接收]中的消息接收器中接收到发送的消息,自己发送的消息自己也是可以接收到的。
发送广播消息
LanCommManager.getBroadcaster().broadcast("Hello LAN-COMM".getBytes());
通过LanCommManager.getCommunicator(); 您可以获取到LAN-COMM的点对点通讯器,可以给指定的设备发送消息。
发送的点对点消息可以在[2.2 消息接收]中的消息接收器中接收到发送的消息。
发送点对点消息
//
Command command = new Command().setDestIp(device.getIp())
.setData("我点你了,哈哈~".getBytes())
.setCallback(new Command.Callback() {
@Override
public void onSuccess() {
//发送成功
Trace.d(TAG, "send success");
}
@Override
public void onError(int code) {
//发送失败
Trace.d(TAG, "onError() " + code);
}
@Override
public void onReceived() {
//对方已收到
Trace.d(TAG, "对方已收到");
}
});
LanCommManager.getCommunicator().sendCommand(command);
//获取广播器
broadcaster
//获取接收器
receiver
//获取搜索器
searcher
//获取点对点消息器
communicator
//发送点对点消息
sendCommand{
destIp = "192.168.1.13"
data = "我点你了,哈哈~".toByteArray()
callback = object : Command.Callback {
override fun onSuccess() {
}
override fun onReceived() {
}
override fun onError(code: Int) {
}
}
}