Доброго времени суток.
Суть проблемы: есть однопоточный сервер, с которым android общается через сокеты. (Больше, чем один поток сделать нельзя, ибо сервер - это ESP'шка, или же nodeMCU)
На него (раз в 250 м/с или быстрее) нужно присылать всякий "мусор" по типу "windows:0", чтобы он не "отваливался" от wifi.
В самом приложении есть 4 кнопки. (Вперёд, назад, влево, вправо)
Нужно сделать так, чтобы при нажатии клавиши - на сервер отправлялись данные "servo:160" (не важно, но главное - те данные, которые нужны), а затем опять же отправлялся мусор. При "отжатии" клавиши - отправлялись, опять же, нужные денные, а затем шёл мусор. Как это сделать?
Есть код, который отправляет по сокетам данные серверу:
class myTask extends AsyncTask<Void, Void, Void>{
String message_to_send = "";
public myTask(String message) {
this.message_to_send = message;
}
@Override
protected Void doInBackground(Void... voids) {
try {
s = new Socket(ip_get.getText().toString(), 1000);
printWriter = new PrintWriter(s.getOutputStream());
printWriter.write(message_to_send);
printWriter.flush();
printWriter.close();
s.close();
}catch (IOException e){
}
return null;
}
}
Код кнопок:
turn_left.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
Return_servo();
return true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN){
Turn_Left();
Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
turn_right.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
Return_servo();
return true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN){
Turn_Right();
Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
stop_car.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
return true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN){
Stop_Car();
Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
ride_car.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
Stop_Car();
return true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN){
Ride_Car();
Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
Методы, которые они вызывают, а так же метод отправки:
private void Ride_Car() {
send_text(range_get.getText().toString());
}
private void Stop_Car(){
send_text("0");
}
private void Turn_Left(){
send_text("8");
}
private void Turn_Right() {
send_text("9");
}
private void Return_servo(){
send_text("7");
}
public void send_text(String message){
myTask mt = new myTask(message);
mt.execute();
}
Помогите, пожалуйста. 4-й день мучаюсь с этим....
Виртуальный выделенный сервер (VDS) становится отличным выбором
И как ее удалить? И если я закоммичу проект, то история попадет на GitHub?
Надо сделать так, чтобы при нажатии на ImageButton открывался(появлялся) layout с некоторыми элементамиКак это реализовать?
В моём приложении есть база данных, которую заполняет пользовательДелаю функцию сохранения на диск и передачи бд
У меня десяток методов с похожими функциямиСтоит ли для оптимизации перегружать десять методов от одного? И если да, подскажите верный способ...