熊哥
熊哥
  • 发布:2019-08-27 11:45
  • 更新:2022-10-28 20:40
  • 阅读:2146

uni-app 在APP-PLUS下实现mdns自动发现同网段设备服务

分类:Native.js

//#ifdef APP-PLUS //条件编译
let vm = this;
let mServerType = '_http._tcp.';//服务类型
let NsdServiceInfo = plus.android.importClass('android.net.nsd.NsdServiceInfo');
let NsdManager = plus.android.importClass('android.net.nsd.NsdManager');
let Context = plus.android.importClass('android.content.Context');
// 导入后可以使用new方法创建类的实例对象
let nsd_service_info = new NsdServiceInfo();
let nsd_manager = new NsdManager();
//获取应用主Activity实例对象系统服务NSD_SERVICE方法
let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE);
//实列API接口监听回调函数
let mDiscoveryListener = plus.android.implements('android.net.nsd.NsdManager$DiscoveryListener', {
onServiceFound: function(service) {
//先发现设备服务再执行连接获取数据
//导入service类
plus.android.importClass(service);
//实列化连接服务接口监听回调函数
//注意NsdManager$ResolveListener中间使用$不是“.”
let mResolveListener = plus.android.implements('android.net.nsd.NsdManager$ResolveListener', {
onServiceResolved: function(services) {
//连接服务
let name = services.getServiceName();
let port = services.getPort();
let ip = services.getHost();
plus.android.importClass(ip); //导入services.getHost()类
ip = ip.getHostAddress();
let arry = {
name: name,
port: port,
ip: ip
};
}
});
mNsdManager.resolveService(service, mResolveListener);//启动连接服务
}
});
// 导入mNsdManager Java类对象
plus.android.importClass(mNsdManager);
mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务(类型,常量,回调函数)参考java discoverServices需要携带的参数类型
//#endif

plus调用安卓所有原生大致实现方法:
1.let NsdServiceInfo= plus.android.importClass("java类")
2.let nsd_service_info= new NsdServiceInfo() new方法创建类的实例对象
3.let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE); //获取应用主Activity实例对象系统服务NSD_SERVICE方法
4.plus.android.implements 声明监听回调方法 (主要通过监听函数获取数据)
5.mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务

https://android.googlesource.com/platform/development/+/master/samples/training/NsdChat/src/com/example/android/nsdchat/NsdHelper.java 需要引入的类和整个实现方法参考java源代码

2 关注 分享
DCloud_heavensoft w***@163.com

要回复文章请先登录注册

FullStack

FullStack

发布、搜索mDNS服务、获取服务ip地址、自定义TXTRecord(ios):[https://ext.dcloud.net.cn/plugin?id=9916](https://ext.dcloud.net.cn/plugin?id=9916)
2022-10-28 20:40
DCloud_heavensoft

DCloud_heavensoft

欢迎提交到插件市场的Native.js分类
2019-08-27 15:36
熊哥

熊哥 (作者)

请使用//#ifdef APP-PLUS 代码 //#endif条件编译
2019-08-27 11:47