Kot*_*k_o 5 sockets android udp broadcast android-6.0-marshmallow
我在使用新的Nexus 5X(Marshmallow)不断收到来自服务器的UDP数据包时遇到问题
我有另一个真正的设备接收所有UDP数据包,但似乎在Android API 23中发生了一些变化.
码:
谁有同样的问题?
if (s == null || s.isClosed()){
Log.v("udp", "----------------------------------------------------new socket---------------------------------");
s = new DatagramSocket(null);
s.setReuseAddress(true);
s.setBroadcast(true);
s.setSoTimeout(5000);
s.bind(new InetSocketAddress(8002));
p = new DatagramPacket(message, message.length);
try{
Thread.sleep(100);
}
catch(Exception e){
}
}
//Log.v("test","---------------------------------------------------- Pas1 ---------------------------------");
message = new byte[100];
//p = new DatagramPacket(message, message.length);
p.setLength(message.length);
s.receive(p);
Run Code Online (Sandbox Code Playgroud)
问题是:
我随机收到广播包,同时收到我收到的其他真实设备.
我确信在android api 23中有些东西被改变了.看来,如果缓冲区中有一个数据包,接收函数只会"触发",但如果在没有"内部"的情况下调用它,则会出现sockettimeout.
谢谢!
Android Marsmallow 引入了打瞌睡模式,该模式会在一段时间后暂停网络访问。也许这也会影响您的应用程序。
\n\n"以下限制适用于您的应用程序在打瞌睡时的情况:
\n\n-网络访问被暂停
\n\n——…… ”
\n\nhttp://developer.android.com/training/monitoring-device-state/doze-standby.html
\n\n坏消息是,除了要求用户将您的应用程序放在免于电池优化的应用程序列表中之外,您对此无能为力。但要小心这一点,因为 Google 可能会从 Play 商店中删除您的应用程序(这就是为什么我没有包含它的源代码)。
\n\n"然而,重要的是 Google\xe2\x80\x99 对应用程序\xe2\x80\x9d 的核心功能 \xe2\x80\x99 的看法。而不是用户,也不是开发者。Google。用户和开发者将应用程序添加到白名单的含义可能是完美和谐的,但如果谷歌认为没有必要,谷歌就会将自己设置为比用户更重要并禁止该应用程序。 ”(https://commonsware.com /blog/2015/11/11/google-anti-trust-issues.html)
\n\n大多数情况下,唯一可行的选择是使用 Google Cloud 消息传递,但这对于您的情况可能不是一个好的解决方案。
\n