我试图通过蓝牙发送数据到另一台蓝牙设备。这是使用SPP配置文件,并且我基于SDK附带的BluetoothChat示例代码来创建应用程序。Android不会在第一次按下按钮时发送数据
我改变了代码,这样如果你按下按钮,应用程序会自动开始通过蓝牙发送数据。还有一个停止按钮来停止发送数据。
问题是,当您第一次打开应用程序并按下开始按钮时,它不会发送任何数据。如果再次按下开始按钮,它将正常工作并发送数据。现在没有问题,所有按钮和发送数据都可以正常工作。
但是为什么第一次按开始按钮失败?这里是相关的代码。
按钮侦听
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];
}
当你按下启动按钮,它设置一个标志,并启动监听器。停止按钮清除标志并停止监听器。但我似乎无法弄清楚为什么它不适用于第一个按钮。谢谢!
你的“按钮侦听器”是一个'AdapterView'的项目点击侦听器? –
对不起,它们不是实际的按钮,而是我基本上把它当作按钮的网格中的图像。当你点击图片时,onClick事件会触发。 – user2461391
您没有发布实际打开连接套接字的代码。 –