Я пытаюсь разработать приложение для Android, которое получает широковещательные пакеты UDP, которые затем отправляет в конечную точку.Отдельный поток продолжает прослушивать широковещательные пакеты.Приложение работает нормально, когда экран устройства включен.Когда экран устройства выключен, приложение не получает эти пакеты, даже когда я получил эти блокировки: PARTIAL_WAKE_LOCK / WifiLock (WIFI_MODE_FULL_HIGH_PERF) / MulticastLock
public class MainActivity extends AppCompatActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
if (wl == null) {
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myapp:sampWakeLockTag");
}
if (!wl.isHeld()) {
wl.acquire();
}
wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiLock == null) {
wifiLock = wifi.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);
}
if (!wifiLock.isHeld()) {
wifiLock.acquire();
}
if (multicastLock == null) {
multicastLock = wifi.createMulticastLock("multicast_Lock");
}
multicastLock.setReferenceCounted(true);
if (!multicastLock.isHeld()) {
multicastLock.acquire();
}
}
@Override
protected void onStart() {
udpServerThread = new UdpServerThread(UdpServerPORT);
udpServerThread.start();
super.onStart();
}
private class UdpServerThread extends Thread{
int serverPort;
DatagramSocket socket;
boolean running;
public UdpServerThread(int serverPort) {
super();
this.serverPort = serverPort;
}
public void setRunning(boolean running){
this.running = running;
}
@Override
public void run() {
running = true;
try {
socket = new DatagramSocket(null);
socket.setBroadcast(true);
socket.bind(new InetSocketAddress("0.0.0.0",serverPort));
String[] prevPacket = new String[0];
while(running){
byte[] buf = new byte[256];
// receive request
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); //this code blocks the program flow
final String packetText = new String(buf, 0, packet.getLength());
jsonPacket.put("packetText", packetText);
// POST to endpoint
}
}
}
}
}
Я тестирую это на планшете Samsung под управлением Android Oreo,Ребята, можете ли вы направить меня в правильном направлении?Я застрял на этой проблеме некоторое время