私は現在、クライアントサーバーシステムを備えたゲームパッド/ゲームのコントローラー機能を備えたAndroidアプリを使用しています。クライアントはAndroidで、サーバーはPCのJavaデスクトップアプリケーションであり、接続としてBluetoothです。これまでのところ、私のアプリケーションは 1 本の指 (ホールドまたはクリック) だけで動作しますが、今はイベントホールドボタン A + クリックボタン B またはホールドボタン A + ホールドボタン B で 2 本の指でマルチタッチを使用しています。 Android でのやり方を理解して、mCommandService(BluetoothCommandService.valueOfButon) でイベントを java に送信し、ボタン A がホールドされているときにボタン B がクリックされたことを Java で読み取り、robot.keyPress で値の表現を実行します。
私はこのブログhttp://luugiathuy.com/2011/02/android-java-bluetooth/の例を実装して、Android と Java 間の Bluetooth 接続を実現します。そして、これはAndroidでの私のonTouchメソッドです
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);
}
};
そして、JavaのこのprocessCommandメソッド
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();
}
}
どうすれば必要なのか教えてください。