2016-05-10 87 views
1

我已经开发了一个android应用程序到rc汽车在wifi上。我已经使用了esp8266 nodemcu wifi模块用于此目的。在我的应用程序。有4个按钮,分别是前进,后退,左右。我可以通过wifi连接这个模块,并为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

没有你的屏幕支持多点触控? –

+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

我已经尝试过了,但没有任何改变,我可以在服务器端处理这个请求,比如这个代码例如'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