在android上睡眠模式后没有UDP广播包(不在睡眠模式下)

时间:2013-10-14 10:12:15

标签: android udp wifi sleep broadcast

接收UDP广播包时遇到了很大的问题。我疯了......

问题是:

1 - 一切运作良好。

2 - 我们可以收到数据包。

3 - 如果我没有关闭android(主页按钮或按键没有按下),我让android进入睡眠状态(屏幕关闭 - > OnPause和OnStop)

4 - 我关闭了我的接入点(没有wifi,模拟出门)。

5 - 我等了2分钟

6-I打开接入点

7 - 当Android醒来时,我会一直收到超时,在这种情况下:

如果我再次使用eclipse启动应用程序 - >超时

如果我销毁应用程序(后退按钮)并重新启动(onCreate)应用程序 - >超时

如果我按主页按钮唤醒 - >超时

如果我禁用并启用wifi - >好的,我收到了数据包

如果我按下按键唤醒 - >好的,我收到了数据包

                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,它可以正常工作吗?这意味着代码没问题......这是一个Android问题吗?

P.D:我杀了Asynctask OnStop,我在Restart

上执行

2 个答案:

答案 0 :(得分:0)

我认为问题可能是在Android上关闭WiFi以节省电池。我不知道恢复WIFi的确切条件,可能如果您发送数据包,它将被启用。

要继续使用WiFi并接收数据包,您可能需要使用WifiManager.WifiLock。还有MulticastLock,但似乎你不需要它。

来自docs:

  

允许应用程序保持Wi-Fi无线电状态清醒。通常,当用户暂时不使用设备时,Wi-Fi无线电可能会关闭。获取WifiLock将保持收音机打开,直到锁定被释放。

     

在使用WifiLock之前,请仔细考虑您的应用是否需要Wi-Fi接入,或者是否可以通过移动网络运行(如果有)。需要下载大文件的程序应该保存WifiLock以确保下载完成,但是网络使用偶尔或低带宽的程序不应该保留WifiLock以避免对电池寿命产生负面影响。

     

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

答案 1 :(得分:0)

此主题处理问题:https://groups.google.com/forum/?fromgroups=#!topic/android-platform/OpbSdp9FTmA

基本上,解决方案是

  

获取PARTIAL_WAKE_LOCK,并在屏幕熄灭时陷阱。   然后禁用并重新启用wifi。这是因为过滤器   只有在屏幕熄灭时才会打开,所以开始使用   屏幕关闭将使其保持工作,直到屏幕再次关闭。