2013-10-14 126 views
1

我们正处在一个大问题,在收到UDP广播数据包。我要疯了...无UDP广播数据包睡眠模式在Android(未处于睡眠模式)

问题是:

1 - 一切正常。

2,我们可以接收数据包。

3,如果我不关闭的Android(home键或键关机按下),我让机器人进入睡眠状态(屏幕关闭 - >的onPause和调用OnStop)

4-我关掉我的接入点(没有wifi,模拟离家出走)。

5-我等待2分钟

6-I打开接入点

7时的Android醒来时,我收到超时所有的时间,在这种情况下:

如果我启动另一次与Eclipse的>超时

的应用程序。如果我破坏应用程序(后退按钮)和重启(的onCreate)应用程序 - >超时

如果我按坎e钮醒 - >超时

如果我禁用和启用无线网络 - > OK,我接收到数据包

如果我按下键关闭唤醒 - > OK,我接收到数据包

   Asycntask do in background{ 
       ..... 
       byte[] message = new byte[1500]; 
       s = new DatagramSocket(null); 
       s.setReuseAddress(true); 
       s.bind(new InetSocketAddress(dataclass.getDataclass().GGGPort)); 
       p = new DatagramPacket(message, message.length); 
       s.setSoTimeout(500); 
       s.setBroadcast(true); 
       dataclass.getDataclass().setGoOut(true); 
       s.receive(p); 
       } 

的问题:

1,什么是唤醒Android主按钮和按键开关按钮之间的区别?他们也这么做 - > OnPause,OnStop - >(解锁)OnRestart。使用wifi会发生什么?

2,为什么程序正在运行,但不接受的时候,它的工作原理确定,如果我禁用/启用WiFi?这意味着代码是OK ...这是一个Android的问题?

Pd积:我杀的AsyncTask调用OnStop和我执行上的重新启动

回答

0

我认为这件事可以是无线网络被关闭Android上,以节省电池。我不知道究竟条件恢复WIFI回来,大概如果你发送包,都将重新启动。

为了保持在WiFi和接收您可能需要使用WifiManager.WifiLock包。还有MulticastLock,但似乎你不需要它。

从文档:

允许应用程序保持Wi-Fi无线电清醒。通常,当用户长时间没有使用该设备时,Wi-Fi无线电可能会关闭。获取WifiLock将使收音机保持工作状态,直到锁定释放。

使用WifiLock之前,仔细考虑如果你的应用需要Wi-Fi接入,或通过移动网络,如果有可能发挥作用。一个需要下载大文件的程序应该包含一个WifiLock以确保下载完成,但是一个网络使用偶尔或者低带宽的程序不应该包含WifiLock以避免对电池寿命产生负面影响。

任何使用WifiLock的应用程序都必须请求应用程序清单元素中的android.permission.WAKE_LOCK权限。

+0

你也可以看看这篇文章:http://stackoverflow.com/questions/9363389/udp-broadcast-packets-not-received-in-sleep-mode?rq=1 – Mixaz