丽水网站建设seo南宁模板建站多少钱

张小明 2026/1/11 8:08:27
丽水网站建设seo,南宁模板建站多少钱,韶关市网站建设公司,网页设计师可转行培训转载必须标明出处 https://blog.csdn.net/jzlhll123 概述 Android 在利用 NsdManager 进行局域网服务发现#xff08;如 mDNS#xff09;时#xff0c;可能遇到的因设备兼容性问题导致的失败。核心结论是#xff1a;为确保应用在绝大多数 Android 设备上稳定运行#xff0…转载必须标明出处 https://blog.csdn.net/jzlhll123概述Android 在利用NsdManager进行局域网服务发现如 mDNS时可能遇到的因设备兼容性问题导致的失败。核心结论是为确保应用在绝大多数 Android 设备上稳定运行强烈建议在使用NsdManager时主动申请并管理WifiManager.MulticastLock。问题现象在使用NsdManager进行服务注册或发现时遇到华为手机android12上的问题mDiscoveryListenernew NsdManager.DiscoveryListener(){// ... 实现 onDiscoveryStarted, onServiceFound, onDiscoveryStopped 等方法OverridepublicvoidonDiscoveryStarted(String regType){Log.d(NSD,服务发现开始);}OverridepublicvoidonServiceFound(NsdServiceInfo service){Log.d(NSD,发现服务: service.getServiceName());}OverridepublicvoidonDiscoveryStopped(String serviceType){Log.d(NSD,服务发现停止);}// ... 处理 onServiceLost, onStartDiscoveryFailed, onStopDiscoveryFailed};mNsdManager.discoverServices(_http._tcp.,NsdManager.PROTOCOL_DNS_SD,mDiscoveryListener);可能会有onDiscoveryStarted的反应也可能discoverServices之后啥反应也没有。其他尝试于是尝试第三方库。方案成功与否备注官方API NSDManager95%以上成功率在某些特定的版本和特定的手机上存在失败的可能性上面讲到可能存在3%-5%的失败率https://github.com/jmdns/jmdns 600多星失败❌ 纯java实现无法解决华为手机发现不了的问题https://github.com/andriydruk/RxDNSSD 300多星有趣在做RxDNSSD尝试的时候有趣的事情发生了添加上它的发现代码我们标准的NSDManager也能生效了不添加它的代码过一会儿app又不能发现。因为了解到它这个项目是使用类似苹果的native c代码实现和一些使用跟底层网络进程逻辑有关所以一开始推测是不是它做了什么事情触发了系统的能力呢最终发现了它的代码里面有一个在网上对于MulticastLock一般都是说的是问题的原因呼之欲出。问题本质根本原因在于Android 系统的碎片化以及各制造商为优化续航实施的激进省电策略。在某些设备上如部分华为、HTC、Pixel 机型服务发现完全失败无法找到任何设备。在另一些设备上如部分三星、小米、旧款 Nexus 机型相同的代码却能正常工作。此问题与代码逻辑无关而与设备硬件、制造商对 Android 系统的定制策略密切相关。多播Multicast是发现的基础NsdManager以及 Bonjour/mDNS/DLNA 等服务发现协议依赖于设备接收发往特定多播地址如224.0.0.251的网络数据包。Wi-Fi 芯片的休眠策略为节省电量Android 系统倾向于在空闲时让 Wi-Fi 芯片进入深度休眠状态。在此状态下芯片无法监听网络上的多播数据包。厂商定制的差异不同设备制造商对“何时允许应用唤醒 Wi-Fi 芯片以接收多播包”有不同的实现严格策略部分厂商如下表所列默认完全屏蔽多播包除非应用显式声明需要。宽松策略部分厂商默认允许或策略不那么严格。MulticastLock的作用WifiManager.MulticastLock是一个应用向系统发出的“显式声明”。调用其acquire()方法是在告诉系统“我的应用有正当理由需要接收多播数据包请保持 Wi-Fi 芯片的相关功能活跃。”关键提示依赖设备“可能宽松”的特性进行开发会为应用埋下严重的兼容性隐患。唯一可靠的方法是主动管理MulticastLock。解决方案主动申请 MulticastLock在AndroidManifest.xml中添加以下权限uses-permissionandroid:nameandroid.permission.CHANGE_WIFI_MULTICAST_STATE/以下是在一个Activity或Fragment中集成MulticastLock的标准做法publicclassServiceDiscoveryActivity extends AppCompatActivity{privateWifiManager.MulticastLock mMulticastLock;privateNsdManager mNsdManager;privateNsdManager.DiscoveryListener mDiscoveryListener;OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 1. 初始化并获取 MulticastLockWifiManager wifiManager(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);mMulticastLockwifiManager.createMulticastLock(MyAppNsdLock);// 设置引用计数锁推荐保证多次 acquire/release 调用匹配正确mMulticastLock.setReferenceCounted(true);// 2. 初始化 NsdManagermNsdManager(NsdManager)getSystemService(Context.NSD_SERVICE);// 3. 创建服务发现监听器mDiscoveryListenernew NsdManager.DiscoveryListener(){// ... 实现 onDiscoveryStarted, onServiceFound, onDiscoveryStopped 等方法OverridepublicvoidonDiscoveryStarted(String regType){Log.d(NSD,服务发现开始);}OverridepublicvoidonServiceFound(NsdServiceInfo service){Log.d(NSD,发现服务: service.getServiceName());}OverridepublicvoidonDiscoveryStopped(String serviceType){Log.d(NSD,服务发现停止);}// ... 处理 onServiceLost, onStartDiscoveryFailed, onStopDiscoveryFailed};}OverrideprotectedvoidonStart(){super.onStart();// 开始发现前获取锁if(mMulticastLock!null!mMulticastLock.isHeld()){mMulticastLock.acquire();}// 启动服务发现if(mNsdManager!null){mNsdManager.discoverServices(_http._tcp.,NsdManager.PROTOCOL_DNS_SD,mDiscoveryListener);}}OverrideprotectedvoidonStop(){super.onStop();// 停止服务发现if(mNsdManager!null){mNsdManager.stopServiceDiscovery(mDiscoveryListener);}// 及时释放锁避免不必要的耗电if(mMulticastLock!nullmMulticastLock.isHeld()){mMulticastLock.release();}}}结论在 Android 碎片化的生态中依赖NsdManager进行局域网服务发现时主动使用WifiManager.MulticastLock是一项关键的防御性编程实践。这能从根本上保证你的功能在绝大多数用户设备上的可靠性避免因厂商定制差异导致的随机性故障从而提供一致的用户体验。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

易讯网络网站建设wordpress 自定义文章类型

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

张小明 2026/1/10 2:30:06 网站建设

河南网站建设价格与方案莆田网站建设开发

摘要 随着城市化进程的加速和人口流动性的增加,房屋租赁市场呈现出蓬勃发展的态势。传统的房屋租赁管理方式依赖人工操作和纸质文档,效率低下且易出错,难以满足现代租赁市场的需求。信息化管理系统的引入成为解决这一问题的关键,能…

张小明 2026/1/10 6:59:33 网站建设

宁波市余姚建设局网站做爰片的网站

在网络安全领域,像 Nmap、Wireshark 和 Metasploit 这样的知名工具往往占据了大部分的关注。然而,还有许多鲜为人知的工具能够显著提升你的渗透测试、漏洞评估和安全研究效率。 本文将带你探索网络安全领域的10个冷门但强大的工具,它们功能多…

张小明 2026/1/10 0:31:57 网站建设

廉政网站 建设需求漳州市网站建设公司

在数字化经济与人工智能技术驱动下,网络营销与直播电商行业对人才的能力要求已从单一执行转向“数据策略”复合维度。大专学历学生若能通过权威职业能力认证补充专业背书,可在就业市场中形成差异化竞争力。本文结合行业需求与认证特性,重点分…

张小明 2026/1/10 6:59:35 网站建设

第一次做网站做什么比较好设计出色的网站

UNIX系统中C语言使用之文件与目录详解 1. 目录基础 在UNIX系统里,目录是文件系统的重要组成部分。每个目录至少有两个特殊条目: - “.” :指代当前目录。程序可通过打开 “.” 文件来读取当前目录,无需知晓其具体名称。 - “..” :表示当前目录的父目录。程序能通过不…

张小明 2026/1/10 6:59:37 网站建设