完成蓝牙连接,工作也就完成了一大半。剩下的就是控制命令了,我们假设发送A为向前命令,B为向后命令,C为向左命令,D为向右命令,E为停止命令。
1. 手动控制
分别为四个操控按钮设立监听
private BluetoothCarService mCarService = null;
Button BtnF;
Button BtnB;
Button BtnL;
Button BtnR;
private void setupControl() {
forwardcontrol();
backwardcontrol();
leftcontrol();
rightcontrol();
}
private void forwardcontrol() {
BtnF = (Button) findViewById(R.id.btnf);
BtnF.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int bnt_action = event.getAction();
switch (bnt_action) {
case MotionEvent.ACTION_DOWN:
sendMessage("A");
break;
case MotionEvent.ACTION_UP:
sendMessage("E");
break;
}
return false;
}
});
}
private void backwardcontrol() {
BtnB = (Button) findViewById(R.id.btnb);
BtnB.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int bnt_action = event.getAction();
switch (bnt_action) {
case MotionEvent.ACTION_DOWN:
sendMessage("B");
break;
case MotionEvent.ACTION_UP:
sendMessage("E");
break;
}
return false;
}
});
}
private void leftcontrol() {
BtnL = (Button) findViewById(R.id.btnl);
BtnL.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int bnt_action = event.getAction();
switch (bnt_action) {
case MotionEvent.ACTION_DOWN:
sendMessage("C");
break;
case MotionEvent.ACTION_UP:
sendMessage("E");
break;
}
return false;
}
});
}
private void rightcontrol() {
BtnR = (Button) findViewById(R.id.btnr);
BtnR.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int bnt_action = event.getAction();
switch (bnt_action) {
case MotionEvent.ACTION_DOWN:
sendMessage("D");
break;
case MotionEvent.ACTION_UP:
sendMessage("E");
break;
}
return false;
}
});
}
private void sendMessage(String message) {
if (message.length() > 0) {
byte[] send = message.getBytes();
mCarService.write(send);
}
}
2. 重力感应
这里通过一个ToggleButton控件来实现重力感应的开启与关闭。
ToggleButton toggleButton1;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private SensorEventListener mSensorListener;
private float x, y;
toggleButton1 = (ToggleButton) this.findViewById(R.id.toggleButton1);
toggleButton1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (toggleButton1.isChecked()) {
Toast.makeText(MainActivity.this, "开启重力感应",
Toast.LENGTH_SHORT).show();
BtnF.setEnabled(false);
BtnB.setEnabled(false);
BtnL.setEnabled(false);
BtnR.setEnabled(false);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
x = event.values[0];
y = event.values[1];
sensorcontrol();
}
@Override
public void onAccuracyChanged(Sensor sensor,
int accuracy) {
}
};
mSensorManager.registerListener(mSensorListener,
mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
} else {
sendMessage("E");
Toast.makeText(MainActivity.this, "关闭重力感应",
Toast.LENGTH_SHORT).show();
BtnF.setEnabled(true);
BtnB.setEnabled(true);
BtnL.setEnabled(true);
BtnR.setEnabled(true);
mSensorManager.unregisterListener(mSensorListener);
}
}
});
}
public void sensorcontrol() {
if (x < 3 && x > -3 && y < 3 && y > -3) {
sendMessage("E");
} else {
if (x > 3) {
sendMessage("C");
} else if (x < -3) {
sendMessage("D");
}
if (y > 3) {
sendMessage("B");
} else if (y < -3) {
sendMessage("A");
}
}
}