2011-05-14 9 views
5

Estoy escribiendo la aplicación remota de Android. Cuando toco y me muevo en la aplicación de Android, , el cursor en la máquina servidor también se mueve, pero se demora aproximadamente un segundo.Mover el cursor más suavemente (aplicación remota)

Mi aplicación simplemente tiene dos hilos: el cliente envía coordenadas, el servidor los recibe y eso es todo. Mi solución es solo pasar dx, dy a través de ObjectInputStream y usar Robot :: mouseMove para mover el cursor.

¿Puede darme algunos consejos para evitar que el cursor se retrase? (sin problemas como RemoteDroid ^^)

Mi Sever:

public void run() {   
      .......... 
      while(true) { 

        // get dx, dy from ObjectInputStream 
        ........ 

        moveMouseByDelta(dx, dy); 
      } 
      ........... 
    } 

    private void moveMouseByDelta(int dx, int dy) 
    { 
     try { 
      Point p = MouseInfo.getPointerInfo().getLocation(); 
      int currentX = p.x; 
      int currentY = p.y; 
      Robot robot = new Robot(); 
      robot.mouseMove(currentX + dx, currentY + dy);    
     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 
    } 

Mi cliente (aplicación de control remoto de Android):

private void touchTouchPad(MotionEvent event) 
{ 
    int x = (int)event.getX(); 
    int y = (int)event.getY(); 
     switch(event.getAction()) { 
      ............ 
      case MotionEvent.ACTION_MOVE: 
       if(leftMouseHold) { 
        if(clientThread != null) { 
         int dx = x - xMouse; 
         int dy = y - yMouse; 
         xMouse += dx; 
         yMouse += dy; 
         clientThread.sendDelta(dx, dy); 
        } 
       } 
       break; 
      .............. 
     } 
} 

(Esto no es mi tarea, es mi estudio)

Editar: añadir más información

+1

No proporcionó gran parte del código de interacción cliente-servidor pero si no lo hizo ya, agregue 'OutputStream.flush() 'después de haber escrito las coordenadas del cliente. También puede valer la pena verificar de dónde viene ese retraso, poner System.out una vez que reciba las coordenadas, etc., para buscar si puede encontrar el lugar donde se cuelga. – harism

+0

Explique la naturaleza del canal de comunicación cliente-servidor. –

Respuesta

1

Hablo solamente de Win dows OS, esto no es nada inusual, porque RDP está limitado a BW a 56-64 Kb/por segundo,

1/congelación, ralentización y retraso es causado por la traducción entre resolución (en píxeles entre f.e. práctico 480x320 y fullHD monitor de PC) de ambos dispositivos, si es la diferencia (en píxeles) es mayor, entonces el movimiento es más antinatural,

2/congelación y retraso es causado por las fluctuaciones en la conexión de datos

Lo peor es que cuando están en este momento los dos factores juntos, entonces es diversión decente

Cuestiones relacionadas