1

我们在接收 UDP 广播数据包时遇到了一个大问题。我要疯了...

问题是:

1-一切正常。

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

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

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

5-我等2分钟

6-我打开接入点

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

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

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

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

如果我禁用并启用 wifi --> 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-home键和关机键唤醒android有什么区别?他们做同样的事情-> OnPause,OnStop-->(解锁)OnRestart。wifi会发生什么?

2-为什么当程序运行但没有接收时,如果我禁用/启用wifi它可以正常工作?这意味着代码是好的......这是一个android问题?

PD:我杀死 Asynctask OnStop 并在重新启动时执行

4

2 回答 2

0

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

基本上,解决方案是

获取 PARTIAL_WAKE_LOCK,并在屏幕关闭时捕获。然后禁用并重新启用wifi。这是有效的,因为过滤器仅在屏幕关闭时打开,因此在屏幕关闭的情况下启动 wifi 将使其继续工作,直到屏幕再次关闭。

于 2014-08-28T21:32:54.450 回答
0

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

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

来自文档:

允许应用程序保持 Wi-Fi 无线电处于唤醒状态。通常,当用户有一段时间没有使用设备时,Wi-Fi 无线电可能会关闭。获取 WifiLock 将使无线电保持打开状态,直到锁定被释放。

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

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

于 2014-03-03T16:53:00.920 回答