نقل قول: مشکل در دریافت UDP
خواندن از سوکت باید مدام تکرار بشه ، توی کد شما تنها یه بار کد خونده می شده و بعد تمام میشه . بجای این که هی اتصال رو قطع و وصل کنید یک باز سوکت رو باز کنید ولی در یک تابع while عمل ارسال و دریافت رو تا اخر کار انجام بدید . یه چیزی مثل این مثال :
@Override
protected Void doInBackground(String... strings) {
try {
int count = 0;
String txtIP = strings[0];
int txtPort = Integer.parseInt(strings[1]);
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(5000);
isRun = true;
publishProgress("UDP run for " + txtIP + ":" + txtPort);
while (isRun) {
Thread.sleep(300);
count++;
if (count > 6) {
String PING = "PING";
DatagramPacket packet = new DatagramPacket(PING.getBytes(), PING.getBytes().length, InetAddress.getByName(txtIP), txtPort);
socket.send(packet);
publishProgress("send UDP PING");
Thread.sleep(500);
byte[] buffer = new byte[4];
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String PONG = new String(packet.getData(), "UTF-8");
publishProgress("receive UDP " + PONG);
count = 0;
}
}
socket.close();
}catch (Exception ex) {
publishProgress("exception in UDP main");
sendLogFile(ex.getMessage());
}
return null;
}
نقل قول: مشکل در دریافت UDP
یک مشکل دیگه هم هست. در اندروئید وقتی Lock Screen فعال بشه دریافت بسته های UDP به صورت کلی متوقف میشه. من خیلی دنبال راهکاری برای این مشکل بودم، اما به دلیل محدودیت های فنی و الزامات صرفه جویی در مصرف توان باتری، این مشکل رو نمیشه حل کرد.
نقل قول: مشکل در دریافت UDP
نقل قول:
نوشته شده توسط
مهدی کرامتی
یک مشکل دیگه هم هست. در اندروئید وقتی Lock Screen فعال بشه دریافت بسته های UDP به صورت کلی متوقف میشه. من خیلی دنبال راهکاری برای این مشکل بودم، اما به دلیل محدودیت های فنی و الزامات صرفه جویی در مصرف توان باتری، این مشکل رو نمیشه حل کرد.
بله همین طوره ، من هم چنین مشکلی رو داشتم ولی چون برنامه من تنها روی گوشی های روت شده اجرا می شد با قرار داد مستقیم wake lock برای کرنل مشکل رو حل می کردم ولی مصرف باتری زیاد می شد.
private static final String WAKE_LOCK = "/sys/power/wake_lock";
private static final String WAKE_UNLOCK = "/sys/power/wake_unlock";
protected void wakeLock() {
Shell.SU.run("echo WAKE_LOCK_SUSPEND > " + WAKE_LOCK);
Shell.SU.run("echo main > " + WAKE_LOCK);
Shell.SU.run("echo wlan_rx > " + WAKE_LOCK);
Shell.SU.run("echo WAKE_LOCK_IDLE > " + WAKE_LOCK);
Log.d("IntentService", "start lock");
}
protected void wakeUnlock() {
Shell.SU.run("echo WAKE_LOCK_SUSPEND > " + WAKE_UNLOCK);
Shell.SU.run("echo main > " + WAKE_UNLOCK);
Shell.SU.run("echo wlan_rx > " + WAKE_UNLOCK);
Shell.SU.run("echo WAKE_LOCK_IDLE > " + WAKE_UNLOCK);
Log.d("IntentService", "start unlock");
}