当前位置: 首页 > news >正文

`android.net.wifi.p2p.nsd` 是 Android SDK 中用于 **Wi-Fi Direct 服务发现(Wi-Fi P2P NSD, Network Service Disc

android.net.wifi.p2p.nsd是 Android SDK 中用于Wi-Fi Direct 服务发现(Wi-Fi P2P NSD, Network Service Discovery)的包,它允许设备在 Wi-Fi Direct 连接建立前,通过 DNS-SD(DNS Service Discovery,即 mDNS)广播和发现局域网内的服务(如打印服务、媒体投屏、文件共享等),而无需先建立 P2P 连接。

该包核心类包括:

  • WifiP2pManager:主管理器,需通过Context.getSystemService(Context.WIFI_P2P_SERVICE)获取。
  • WifiP2pManager.DnsSdServiceResponseListener:监听服务解析响应(服务名 → IP + 端口)。
  • WifiP2pManager.DnsSdTxtRecordListener:监听服务的 TXT 记录(携带自定义元数据,如"version=1.0""type=media")。
  • WifiP2pManager.ActionListener:通用异步操作回调(如注册/注销服务成功/失败)。
  • WifiP2pDnsSdServiceInfo:封装要发布的服务信息(服务名、类型、端口、TXT 记录等)。

⚠️ 注意:

  • 需要android.permission.ACCESS_WIFI_STATEandroid.permission.CHANGE_WIFI_STATEandroid.permission.ACCESS_FINE_LOCATION(Android 6.0+ 运行时权限,因 Wi-Fi 扫描涉及位置信息)。
  • 服务类型必须符合 DNS-SD 格式:_服务名._传输协议,例如_http._tcp._printer._tcp.(末尾点不可省略)。
  • 仅在 Wi-Fi Direct启用且设备支持 NSD时可用(部分厂商 ROM 可能限制或不完整实现)。

✅ Kotlin 示例(发布服务):

valmanager=context.getSystemService(Context.WIFI_P2P_SERVICE)asWifiP2pManagervalchannel=manager.initialize(context,context.mainLooper,null)valserviceInfo=WifiP2pDnsSdServiceInfo.newInstance("MyPrinter","_printer._tcp.",mapOf("model"to"AndroidPrinter","status"to"ready"))serviceInfo.port=8080manager.addLocalService(channel,serviceInfo,object:WifiP2pManager.ActionListener{overridefunonSuccess(){Log.d("NSD","Service registered")}overridefunonFailure(reason:Int){Log.e("NSD","Register failed:$reason")}})

✅ Java 示例(发现服务):

manager.setDnsSdResponseListeners(channel,newWifiP2pManager.DnsSdServiceResponseListener(){@OverridepublicvoidonDnsSdServiceAvailable(StringinstanceName,StringregistrationType,WifiP2pDevicesrcDevice){Log.d("NSD","Found service: $instanceName ($registrationType)");// 此时可调用 requestService() 解析 IP 和 TXTmanager.requestService(channel,srcDevice,registrationType,newWifiP2pManager.DnsSdTxtRecordListener(){@OverridepublicvoidonTxtRecordAvailable(StringfullDomainName,Map<String,String>record,WifiP2pDevicedevice){Log.d("NSD","TXT: $record");}});}},newWifiP2pManager.DnsSdTxtRecordListener(){/* unused here */});

📌 补充说明:

  • addLocalService()注册本机服务;
  • discoverServices()启动服务发现(需先调用setDnsSdResponseListeners());
  • removeLocalService()clearLocalServices()用于清理;
  • 实际使用中常与WifiP2pManager.PeerListListener/ConnectionInfoListener配合,实现“发现 → 连接 → 通信”全流程。
    android.net.wifi.p2p.nsd Kotlin |Java
    Classes
    WifiP2pDnsSdServiceInfo A class for storing Bonjour service information that is advertised over a Wi-Fi peer-to-peer setup.
    WifiP2pDnsSdServiceRequest A class for creating a Bonjour service discovery request for use with WifiP2pManager#addServiceRequest and WifiP2pManager#removeServiceRequest
    WifiP2pServiceInfo A class for storing service information that is advertised over a Wi-Fi peer-to-peer setup
    WifiP2pServiceRequest A class for creating a service discovery request for use with WifiP2pManager#addServiceRequest and WifiP2pManager#removeServiceRequest

This class is used to create service discovery request for custom vendor specific service discovery protocol WifiP2pServiceInfo#SERVICE_TYPE_VENDOR_SPECIFIC or to search all service protocols WifiP2pServiceInfo#SERVICE_TYPE_ALL.
WifiP2pUpnpServiceInfo A class for storing Upnp service information that is advertised over a Wi-Fi peer-to-peer setup.
WifiP2pUpnpServiceRequest A class for creating a Upnp service discovery request for use with WifiP2pManager#addServiceRequest and WifiP2pManager#removeServiceRequest

http://www.jsqmd.com/news/584665/

相关文章:

  • OpenClaw权限管理:百川2-13B-4bits量化模型的文件访问控制
  • Better BibTeX性能终极指南:大规模文献库处理效率深度解析
  • lamp-cloud GitOps终极指南:基于Git的自动化部署完整实践
  • `android.nfc.tech` 是 Android SDK 中用于访问 NFC(近场通信)标签底层技术的包
  • GoogleScraper高级技巧:10个提升爬取效率的实用方法
  • 2026年靠谱的车间降温工业风扇/超大型工业风扇/大功率工业风扇横向对比厂家推荐 - 品牌宣传支持者
  • Harbor镜像同步到阿里云ACR和华为云SWR的保姆级避坑指南(附实操截图)
  • UID生成器与服务网格集成:Istio环境下的高性能ID生成策略终极指南
  • 终极Hound API使用指南:如何将极速代码搜索集成到你的开发工具链
  • OpenPipe多模型支持指南:GPT 3.5、Mistral和Llama 2的完整精调方案
  • `android.print.pdf` 并不是一个官方的 Android API 包名或类名
  • Velero性能优化终极指南:解决插件模式下备份缓慢的10个高效策略
  • 2026年质量好的厂房降温省电空调/节能省电空调横向对比厂家推荐 - 品牌宣传支持者
  • 【RAG】基于 RAG 的知识库问答系统设计与实现
  • `android.provider` 是 Android SDK 中的一个包,它提供了一系列用于访问系统级内容提供者(Content Providers)的类和常量
  • 2026年4月OpenClaw部署方法:本地服务器部署OpenClaw、配置百炼APIKey、集成Skill详细教程
  • Audio Pixel Studio快速上手:Chrome/Firefox/Safari浏览器兼容性实测报告
  • OpenClaw自然语言编程:千问3.5-27B理解模糊需求并执行
  • 如何快速掌握Bowser浏览器检测:从原理到实战的完整指南
  • 黑丝空姐-造相Z-Turbo一键部署教程:5分钟开启AI绘画,新手零基础入门
  • **遗传算法在路径优化中的创新应用:从理论到Python实战**在智能优化领域,**遗传算法(Genetic A
  • Seesaw v2测试工具终极指南:4大核心工具详解与实战
  • Android 安全开发涉及多个层面,包括应用层(Kotlin/Java)、系统层、数据存储、网络通信、权限管理、代码混淆与反逆向等
  • 为什么你的程序体积持续增长?Bloaty终极二进制分析工具帮你找到答案
  • vLLM-v0.17.1效果展示:多LoRA热切换,支持10+垂类模型动态加载
  • Passbolt API完整指南:解锁团队密码管理的终极接口手册
  • OpenClaw飞书机器人配置:Qwen3-4B模型对话触发实战
  • PyJWT与云原生应用集成的终极指南:如何构建安全的微服务架构
  • 告别回调地狱:PromiseKit函数式三剑客拯救异步代码
  • 双模型协作!OpenClaw同时调用Qwen3-4B与Codex完成编程任务