Pet*_*irn 38 android bonjour zeroconf
我正在使用Droid/Android 2.0.1并遇到一个显然很多人遇到的问题:我无法使用我所知道的一个纯Java zeroconf库jmDNS来发现服务.(Apple的Bonjour,虽然它适用于Linux和Windows Java,但我相信由于依赖本机代码而难以移植到Android.)
我可以创建服务,但不能发现它们.我想弄清楚发生了什么.
这里有一份持续的问题报告; 与多播和IPv6有关,但似乎也在抛弃jmDNS的用户:http://code.google.com/p/android/issues/detail? id = 2323
知道为什么这个人可能会成功吗?请参阅错误报告中的注释22.(我是SO的新手,因此无法发布多个网址.)
我测试了他们的代码,但没有运气.
有没有人使用jmDNS或其他库在Android上成功完成zeroconf服务发现?
我的发现问题是否可能与IPv6组播问题有关?
小智 12
我也是新手,否则我会对smountcastle的答案发表评论,这个评论大多是正确的.我刚刚在运行Android 2.1的Droid上处理完全相同的问题.我发现我需要将MulticastLock设置为引用计数,否则它似乎会自动释放.
AndroidManifest.xml:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
// Networking code:
WifiManager wifi = getSystemService( Context.WIFI_SERVICE );
MulticastLock lock = wifi.createMulticastLock("fliing_lock");
lock.setReferenceCounted(true);
lock.acquire();
Run Code Online (Sandbox Code Playgroud)
只要确保lock.release()在完成后再打电话.这可能只是Android 2.0+所必需的,Droid是我目前唯一的测试设备,所以我不能肯定地说.
我设法交叉编译Bonjour for Android并使其运行的方式与Apple打算在打印机等嵌入式设备上运行的方式相同.这是构建脚本.
这是一个小型便利包装器,可以让它按照您的预期运行.
我们使用Bonjour发行版中的client_shim层通过通常的dns_sd.h API包装对嵌入式mDNS实现的所有访问.您不使用带有文件句柄的惯用语和带有填充层的选择.
Apple_不完全支持client_shim层 - 实际上我在变量名中发现了拼写错误,但它仍在运行.您需要应用此修补程序以包含正确的头文件,修复拼写错误并通过Android API获取日志记录.
还有一件事:您需要从Java代码中获取并保存MultiCast Lock,否则您将找不到任何其他人.请参阅此处的示例.
除此之外,我在Android API Level 8上工作,我们正在维护一个预先构建的Bonjour for Android库,但我不确定这是否可以按照许可证进行操作.
编辑:
预编译中的版本是330.10,较新的版本使用client_shim作为静态库无法在Windows上使用MSVC2010进行编译,因此我们保留了这个版本.
祝好运!
Android 4.1为应用程序添加了本机Bonjour支持(看起来像是通过mDNSResponder实现的).高级API似乎被称为网络服务发现,但似乎是下面的Bonjour.似乎还有一个通过android.net.wifi.p2p.WifiP2pManager公开的低级API .
虽然它似乎没有用于系统范围的DNS查找(例如,我不能简单地通过Chrome 浏览到http://machine.local),但这似乎是对原生进行zeroconf/Bonjour查找的方法Android应用程序未来.
| 归档时间: |
|
| 查看次数: |
29340 次 |
| 最近记录: |