我正在尝试为Android开发多播应用程序。但是,当屏幕关闭时,它不起作用。我知道这不是我的设备,因为Winamp在屏幕关闭时工作正常。我正在运行这项服务。
AndroidManifest.xml对服务的防御:
<service android:exported="true" android:name="AndroidRocketService"></service>
(该应用程序在工作时将是开源的,所以我并不担心发布整个非工作的东西)
提前致谢,
乔
答案 0 :(得分:3)
明显的:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
the wake.acquire()
行之前没有进入进入睡眠状态(使用boolean bool = wake.isHeld();
进行检查)。答案 1 :(得分:3)
Aleadam的回答是正确的。您还需要确保获得注释中提到的多播锁,并在:
Android Multicast socket stops listening&lt;&lt;看看Erich的答案(不是公认的答案)
更大的问题是,在Gingerbread之前,Android没有遵循其多播算法的正确标准,正如与谷歌开发人员here的几次(愤怒)交流中所指出的那样。在他们的论坛上还有另一个错误,因为前面的Gingbread手机没有正确加入多播 - 但我现在找不到那个。
最重要的是,预先Gingbread手机将多播数据包的TTL设置为1.因此,如果一路上任何东西减少TTL(通常是一些中间路由器),你的数据包将“死在藤蔓上”。
Google在我关联的帖子中发布了针对TTL错误的修复程序,但要实施此修复程序,您必须构建自己的自定义内核并将其部署到手机中。
值得注意的是,几款非常受欢迎的手机不能正常进行多播。想到的是HTC Incredible,它可以发送但不能接收。如果你使用第三方固件(即Cyanogen),那么多播工作正常。
脱离我的头脑 - 这里有一些我知道工作/不工作