2013-01-14 1 views
2

나는 현재 안드로이드이고 서버가 PC와 블루투스의 자바 데스크톱 응용 프로그램 인 클라이언트 - 서버 시스템과 함께 게임 패드/게임 컨트롤러 기능을 가진 안드로이드 응용 프로그램을 작업하고 있습니다. 연결. 지금까지, 내 ​​응용 프로그램은 단지 하나의 손가락 (보류 또는 클릭)와 함께 작동하고 지금은 이벤트 홀드 버튼에서 2 손가락으로 멀티 터치와 함께 일하고 있어요 + 버튼을 클릭 B 또는 버튼을 누른 상태로 버튼 + 보류 B.하지만, 안드로이드에서 어떻게 할 지에 대한 아이디어를 얻고, mCommandService (BluetoothCommandService.valueOfButon)로 java에 이벤트를 보내고, 버튼 A가 보류 상태 일 때 자바 스크립트를 읽고 robot.keyPress로 값 표현을 실행한다.자바에서 안드로이드 멀티 태스킹에 대응하는 방법

나는이 블로그 http://luugiathuy.com/2011/02/android-java-bluetooth/에서 예제를 구현하여 android와 java 사이의 블루투스 연결을 구현합니다. 그리고 안드로이드

public boolean onTouch(View v, MotionEvent event) { 
switch(v.getId()){ 
    case R.id.tombolL1: 
     cmd = BluetoothCommandService.aksi_l1; 
    break; 

    case R.id.tombolL2: 
     cmd = BluetoothCommandService.aksi_l2; 
    break; 

    case R.id.tombolR1: 
     cmd = BluetoothCommandService.aksi_r1; 
    break; 

    case R.id.tombolR2: 
     cmd = BluetoothCommandService.aksi_r2; 
    break; 

    case R.id.tombolAtas: 
     cmd = BluetoothCommandService.arah_atas; 
    break; 

    case R.id.tombolBawah: 
     cmd = BluetoothCommandService.arah_bawah; 
    break; 

    case R.id.tombolKiri: 
     cmd = BluetoothCommandService.arah_kiri; 
    break; 

    case R.id.tombolKanan: 
     cmd = BluetoothCommandService.arah_kanan; 
    break; 

    case R.id.tombolSegitiga: 
     cmd = BluetoothCommandService.aksi_segitiga; 
    break; 

    case R.id.tombolBulat: 
     cmd = BluetoothCommandService.aksi_bulat; 
    break; 

    case R.id.tombolSilang: 
     cmd = BluetoothCommandService.aksi_silang; 
    break; 

    case R.id.tombolKotak: 
     cmd = BluetoothCommandService.aksi_kotak; 
    break; 

} 

switch(action){ 
    case MotionEvent.ACTION_DOWN: 
     handler1.removeCallbacks(mUpdateTask); 
     handler1.postAtTime(mUpdateTask, 200); 
    break; 

    case MotionEvent.ACTION_UP: 
     handler1.removeCallbacks(mUpdateTask); 
    break; 
} 
return false; 
} 

private Runnable mUpdateTask = new Runnable() { 

    @Override 
    public void run() { 
     mCommandService.write(cmd); 
     handler1.postAtTime(this, SystemClock.uptimeMillis() + 100); 
     //handler1.postAtTime(this, 200); 
    } 
}; 

에서이 내 onTouch 방법과

private void processCommand(int command) { 
    try { 
     Robot robot = new Robot(); 
     int key = 0; 
     switch(command){ 
      case arah_atas: 
       key = KeyEvent.VK_UP; 
      break; 
      case arah_bawah: 
       key = KeyEvent.VK_DOWN; 
      break; 
      case arah_kiri: 
       key = KeyEvent.VK_LEFT; 
      break; 
      case arah_kanan: 
       key = KeyEvent.VK_RIGHT; 
      break; 
      case aksi_segitiga: 
       key = KeyEvent.VK_A; 
      break; 
      case aksi_bulat: 
       key = KeyEvent.VK_X; 
      break; 
      case aksi_silang: 
       key = KeyEvent.VK_Z; 
      break; 
      case aksi_kotak: 
       key = KeyEvent.VK_S; 
      break; 
      case aksi_l1: 
       key = KeyEvent.VK_Q; 
      break; 
      case aksi_l2: 
       key = KeyEvent.VK_W; 
      break; 
      case aksi_r1: 
       key = KeyEvent.VK_R; 
      break; 
      case aksi_r2: 
       key = KeyEvent.VK_E; 
      break; 
      case aksi_select: 
       key = KeyEvent.VK_SPACE; 
      break; 
      case aksi_start: 
       key = KeyEvent.VK_M; 
      break; 
     } 

     robot.keyPress(key); 
     Thread.sleep(50); 
     robot.keyRelease(key); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

이, 내가 내가 필요로 무엇을 할 수있는 방법을 알려 주시기 바랍니다 자바에서이 processCommand 방법은?

답변

0

Android에서 멀티 터치를 즐기려는 사람으로서이라이브러리를 사용하는 것이 좋습니다. 그것은 멀티 터치의 핵심을 다루는 두통을 추상화합니다. 크기 조정, 회전 등을 할 수 있습니다. 멀티 터치가 버그가 많은 휴대폰에 대한 지원을 제공하며 몇 가지 데모 프로젝트가 있습니다. 게다가 (이전에 해왔 던) 변환 행렬을 추출하여이 정보를 데이터베이스에 저장 한 다음 나중에 다시 그래픽에 적용하여 제대로 초기화 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 하지만 내 응용 프로그램에서는 사용할 수 없으며 실제로는 내가 찾던 대답이 아니라고 생각합니다. 어쩌면 나중에 다른 프로젝트에서 사용하겠습니다 :) – IoRin