微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Android 10 UDP 客户端在后台仅限发布模式

如何解决Xamarin Android 10 UDP 客户端在后台仅限发布模式

我在 Android 10 中遇到了 UDPClient 问题(在 Android 9 中运行良好),所以我假设我在 Android 10 中遗漏了到目前为止我还没有找到。

我有一个 UDPService(后台服务)正在运行,这是一个非常标准的实现(端口是 64200)

                    m_udpSocket = new UdpClient(m_port);
                    m_udpSocket.Client.ReceiveTimeout = (int)m_healthTimeout.TotalMilliseconds;
                    m_healthSocket.Client.SetSocketoption( SocketoptionLevel.socket,SocketoptionName.ReceiveTimeout,(int)m_healthTimeout.TotalMilliseconds );

我不会在这个阶段发布发送和接收代码,因为我认为它与更多的权限相关。

客户端周期性地向服务器发送一些UDP数据进行处理。它完全基于本地网络(不是互联网),数据通过设备上的 WiFi 发送。

在 Android 9 中,应用在前台后台都可以正常工作。

在 Android 10 中,当应用程序在前台时它可以完美运行,但是当应用程序进入后台时,当我尝试在套接字上发出发送时

System.Net.sockets.socketException (0x80004005):访问被拒绝

错误仅在 Android 10 的发布模式下发生。如果我在连接到设备的调试模式下运行,我可以将应用程序置于后台并且 UDP 流量按预期工作。

基于上述所有内容,我假设我还需要做一些其他的事情来允许套接字在发布模式下在后台工作,但我似乎无法确定它是什么。我已经阅读了有关 INTERNET 权限以及调试模式如何自动添加此权限的信息,因此我在 Android 清单中是否还缺少其他可能导致此问题的内容

任何帮助将不胜感激。

提前致谢。

解决方法

对于遇到类似问题的任何人,最终它与实际代码无关,而是Android中的电池优化设置。

一旦我从自动电池优化中删除应用程序,一切都按预期工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。