Android上的多播不希望在屏幕关闭时工作

时间:2011-04-23 16:20:36

标签: java android networking multicast

我正在尝试为Android开发多播应用程序。但是,当屏幕关闭时,它不起作用。我知道这不是我的设备,因为Winamp在屏幕关闭时工作正常。我正在运行这项服务。

AndroidManifest.xml对服务的防御:

  

<service android:exported="true" android:name="AndroidRocketService"></service>

服务的Java代码:http://tinypaste.com/c569a/fullscreen.php?hash=e7495a255a33a99ea8cc48bf24ea2b01&toolbar=true&linenum=true

(该应用程序在工作时将是开源的,所以我并不担心发布整个非工作的东西)

提前致谢,

2 个答案:

答案 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),那么多播工作正常。

脱离我的头脑 - 这里有一些我知道工作/不工作

  • HTC Incredibe(无法接收)
  • Nexus One(OK)
  • Nexus S(OK)
  • 摩托罗拉Droid / Droid Pro(OK)