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];
- 上一篇:ASP.net高校教师信息网站设计与实现
- 下一篇:asp.net农产品供求信息发布平台设计与实现
-
-
-
-
-
-
-
乳业同业并购式全产业链...
酸性水汽提装置总汽提塔设计+CAD图纸
大众媒体对公共政策制定的影响
杂拟谷盗体内共生菌沃尔...
中考体育项目与体育教学合理结合的研究
十二层带中心支撑钢结构...
当代大学生慈善意识研究+文献综述
河岸冲刷和泥沙淤积的监测国内外研究现状
电站锅炉暖风器设计任务书
java+mysql车辆管理系统的设计+源代码