2016-05-10 4 views
1

У меня есть приложение android для автомобиля rc через Wi-Fi.Я использовал esp8266 nodemcu wifi модуль для этой цели. В моем приложении. есть 4 кнопки, которые расположены вперед, назад, вправо и влево. Я могу подключить этот модуль по Wi-Fi и выполнить некоторые основные операции для ex. двигаться вперед, двигаться назад, повернуть направо, повернуть налево. Вот коды, что делает это операции:Как справиться с двумя нажатиями кнопки в одно и то же время в android

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    String action; 

    if (v.getId() == moveForward.getId()) 
     action = "/forward/"; 

    else if (v.getId() == moveReverse.getId()) 
     action = "/reverse/"; 

    else if (v.getId() == moveRigth.getId()) 
     action = "/right/"; 

    else 
     action = "/left/"; 

    String serverAddress = ipAddress.getText().toString() + ":" + "80" + action; 

    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     HttpRequestTask requestTask = new HttpRequestTask(serverAddress); 
     requestTask.execute("1"); 

    } else if (event.getAction() == MotionEvent.ACTION_UP) { 
     HttpRequestTask requestTask = new HttpRequestTask(serverAddress); 
     requestTask.execute("0"); 
    } 
    return false; 
} 

private class HttpRequestTask extends AsyncTask<String, Void, String> { 

    private String serverAdress; 
    private String serverResponse = ""; 

    public HttpRequestTask(String serverAdress) { 
     this.serverAdress = serverAdress; 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     String val = params[0]; 
     String url = "http://" + serverAdress + val; 
     Log.e("url", url); 

     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet getRequest = new HttpGet(); 
      getRequest.setURI(new URI(url)); 
      HttpResponse response = client.execute(getRequest); 

      InputStream inputStream = null; 
      inputStream = response.getEntity().getContent(); 
      BufferedReader bufferedReader = 
        new BufferedReader(new InputStreamReader(inputStream)); 

      serverResponse = bufferedReader.readLine(); 
      inputStream.close(); 

     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
      serverResponse = e.getMessage(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
      serverResponse = e.getMessage(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      serverResponse = e.getMessage(); 
     } 

     return serverResponse; 
    } 

Когда пользователь нажал вперед, можно также нажать правую кнопку или левую кнопку, и машина идет вперед и повернуть направо или двигаться обратным и повернуть налево, в то же время. Но я не мог понять, как я могу обработать две нажатые кнопки в одно и то же время в коде. Можете ли вы показать мне способ?

+0

сделал ваша поддержка экрана Multi Touch? –

+0

@OussemaAroua Я не знаю. Если это так, как с этим справиться? – user3059066

+0

просто добавьте android: splitMotionEvents = "true" в вашем макете контента –

ответ

0
if (v.getId() == moveForward.getId()) 
     action = "/forward/"; 

if (v.getId() == moveReverse.getId()) 
     action = "/reverse/"; 

if (v.getId() == moveRigth.getId()) 
     action = "/right/"; 

if (v.getId() == moveLeft.getId()) 
     action = "/left/"; 

так что вы можете обрабатывать все движения, ваш старый код будет проверить только одно условие

+0

Я пробовал, но ничего не изменилось. Я могу обрабатывать запрос на стороне сервера, как этот код ex. 'if (req.indexOf ("/forward/0 ")! = -1) forwardValue = 0; if (req.indexOf ("/ forward/1")! = -1) forwardValue = 1; 'Этот код обрабатывает только один параметр из запроса. Считаете ли вы, что проблема связана с сервером? – user3059066

+0

уверены, что ваш экран поддерживает мультитач? войдите в сервер с данными, полученными из приложения –

+0

У меня есть Galaxy J5. Думаю, он поддерживает мультитач. Я не мог решить проблему, если кнопка нажата одновременно с нажатием второй кнопки, вторая переопределяет первую. Я нажал вперед, приложение запрашивает сервер 'http: // Ip: 80/forward/1', а затем сервер смотрит, что этот запрос содержит' forward/1', он дает 1 булавки и в то же время я нажимаю правую кнопку, приложение запрашивает сервер 'http: // Ip: 80/right/1', и сервер выглядит, что этот запрос содержит' right/1', он дает 1 булавки, но в это время приложение запрашивает сервер как 'http: // Ip: 80/forward/1/right/1'? – user3059066