`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-SDDNS Service Discovery即 mDNS广播和发现局域网内的服务如打印服务、媒体投屏、文件共享等而无需先建立 P2P 连接。该包核心类包括WifiP2pManager主管理器需通过Context.getSystemService(Context.WIFI_P2P_SERVICE)获取。WifiP2pManager.DnsSdServiceResponseListener监听服务解析响应服务名 → IP 端口。WifiP2pManager.DnsSdTxtRecordListener监听服务的 TXT 记录携带自定义元数据如version1.0、typemedia。WifiP2pManager.ActionListener通用异步操作回调如注册/注销服务成功/失败。WifiP2pDnsSdServiceInfo封装要发布的服务信息服务名、类型、端口、TXT 记录等。⚠️ 注意需要android.permission.ACCESS_WIFI_STATE、android.permission.CHANGE_WIFI_STATE、android.permission.ACCESS_FINE_LOCATIONAndroid 6.0 运行时权限因 Wi-Fi 扫描涉及位置信息。服务类型必须符合 DNS-SD 格式_服务名._传输协议例如_http._tcp.、_printer._tcp.末尾点不可省略。仅在 Wi-Fi Direct启用且设备支持 NSD时可用部分厂商 ROM 可能限制或不完整实现。✅ Kotlin 示例发布服务valmanagercontext.getSystemService(Context.WIFI_P2P_SERVICE)asWifiP2pManagervalchannelmanager.initialize(context,context.mainLooper,null)valserviceInfoWifiP2pDnsSdServiceInfo.newInstance(MyPrinter,_printer._tcp.,mapOf(modeltoAndroidPrinter,statustoready))serviceInfo.port8080manager.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,MapString,Stringrecord,WifiP2pDevicedevice){Log.d(NSD,TXT: $record);}});}},newWifiP2pManager.DnsSdTxtRecordListener(){/* unused here */}); 补充说明addLocalService()注册本机服务discoverServices()启动服务发现需先调用setDnsSdResponseListeners()removeLocalService()和clearLocalServices()用于清理实际使用中常与WifiP2pManager.PeerListListener/ConnectionInfoListener配合实现“发现 → 连接 → 通信”全流程。android.net.wifi.p2p.nsd Kotlin |JavaClassesWifiP2pDnsSdServiceInfo 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#removeServiceRequestWifiP2pServiceInfo A class for storing service information that is advertised over a Wi-Fi peer-to-peer setupWifiP2pServiceRequest A class for creating a service discovery request for use with WifiP2pManager#addServiceRequest and WifiP2pManager#removeServiceRequestThis 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