if (mConnectedThread != null) { // 停止一切已经配对的线程
mConnectedThread.cancel();
mConnectedThread = null;
}
mConnectThread = new ConnectThread(device); // 开始进行新的配对
mConnectThread.start();
setState(STATE_CONNECTING);
}
蓝牙通信时,需要向蓝牙端口填写发送数据。
public void write(byte[] out) {
ConnectedThread r; // 临时线程
synchronized (this) { // 同步一个已配对线程的副本
if (mState != STATE_CONNECTED) return;
r = mConnectedThread;
}
r.write(out); // 填写发送数据并发送
}
蓝牙文护一个数据分派处理器,统一将蓝牙数据进行处理。
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_WRITE:
byte[] writeBuf = (byte[]) msg.obj; // 将发送数据转换
String writeMessage = new String(writeBuf);
mChatService.send(writeMessage);
break;
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj; // 提取并重新构造发送数据
String readMessage = new String(readBuf, 0, msg.arg1);
BTReader.option(readMessage); // 蓝牙接收器处理接收数据
break;
}
}
};
7.5 抖动重排功能实现
在蓝牙对战中,加入抖动重排功能。可利用的手机传感器有多种选择,例如重力传感器、加速度传感器和陀螺仪等。本课题中,选用常用的重力传感器,原因有二:第一,每部Android手机都配有重力传感器,第二,重力传感器相对简单,使用方便。
// 获取系统传感器服务
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
x = y = 0; // 假定重力传感器初始坐标值
z = 10; // 同上
SensorEventListener sensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent e) {
// 当在0.1秒内重力值在任一坐标上摆动幅度不低于6阶时,
// 认为手机抖动
if( ((e.values[SensorManager.DATA_X] - x >= 6)
|| (e.values[SensorManager.DATA_Y] - y >= 6)
|| (e.values[SensorManager.DATA_Z] - z >= 6))
&& (e.timestamp - timestamp < 100000000))
gameView.change();
x = e.values[SensorManager.DATA_X];
y = e.values[SensorManager.DATA_Y];
z = e.values[SensorManager.DATA_Z]; Android安卓手机游戏连连看设计(9):http://www.751com.cn/jisuanji/lunwen_3518.html