我正在尝试通过蓝牙将数据发送到另一个支持蓝牙的设备。这是使用 SPP 配置文件,并且我基于 SDK 中包含的 BluetoothChat 示例代码应用程序。
我更改了代码,以便如果您按下按钮,应用程序会自动开始通过蓝牙发送数据。还有一个停止按钮可以停止发送数据。
问题是,当您第一次打开应用程序并按下开始按钮时,它不会发送任何数据。如果再次按下开始按钮,它将正常工作并发送数据。现在没有问题,所有按钮和发送数据都可以正常工作。
但是为什么你第一次按下开始按钮会失败呢?这是相关代码。
按钮监听器
mConversationView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//Toast.makeText(BluetoothChat.this, "" + position, Toast.LENGTH_SHORT).show();
Intent serverIntent = null;
switch (position) {
case 2: //Connect button
serverIntent = new Intent(BluetoothChat.this, DeviceListActivity.class);
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE);
break;
case 0: //Start button
sends = 1;
mSensorManager.registerListener(BluetoothChat.this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
break;
case 1: //Stop button
sendMessage("F0.0\r\n");
sendMessage("G0.0\r\n");
sends = 0;
mSensorManager.unregisterListener(BluetoothChat.this);
break;
};
}
});
OnSensorChanged 事件
@Override
public void onSensorChanged(SensorEvent event) {
//Toast.makeText(this, "acce", Toast.LENGTH_SHORT).show();
if ((event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) || (sends==0))
return;
float mSensorX = 0;
float mSensorY = 0;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_0:
mSensorX = event.values[1];
mSensorY = -event.values[0];
break;
case Surface.ROTATION_90:
mSensorX = -event.values[0];
mSensorY = -event.values[1];
break;
case Surface.ROTATION_180:
mSensorX = -event.values[1];
mSensorY = event.values[0];
break;
case Surface.ROTATION_270:
mSensorX = event.values[0];
mSensorY = event.values[1];
break;
}
//if(mSensorX < 0)
//mSensorX = mSensorX*-1;
mSensorX = mSensorX * 3;
float sendL;
float sendR;
mSensorY = mSensorY * (float)0.75;
if(mSensorX < 1 && mSensorX > -3){
mSensorX = 0;
}
if(mSensorY < 0){ //tilting right
mSensorY = mSensorY*-1;
if(mSensorX > -3){
sendL = mSensorX + mSensorY;
sendR = mSensorX - mSensorY;
}
else{
sendL = mSensorX - mSensorY;
sendR = mSensorX + mSensorY;
}
}
else{ //tilting left
if(mSensorX > -3){
sendL = mSensorX - mSensorY;
sendR = mSensorX + mSensorY;
}
else{
sendL = mSensorX + mSensorY;
sendR = mSensorX - mSensorY;
}
}
String lll = "F";
String rrr = "G";
if(sendL < 0){
lll = "V";
sendL *= -1;
}
if(sendR < 0){
rrr = "B";
sendR *= -1;
}
String message = Float.toString(sendL);
message = lll+message + "\r\n";
sendMessage(message);
message = Float.toString(sendR);
message = rrr+message + "\r\n";
sendMessage(message);
//float mSensorY = event.values[1];
}
当您按下开始按钮时,它会设置一个标志并启动侦听器。停止按钮清除标志并停止侦听器。但我似乎无法弄清楚为什么它在第一次按下按钮时不起作用。谢谢!