0

我正在尝试通过蓝牙将数据发送到另一个支持蓝牙的设备。这是使用 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];
}

当您按下开始按钮时,它会设置一个标志并启动侦听器。停止按钮清除标志并停止侦听器。但我似乎无法弄清楚为什么它在第一次按下按钮时不起作用。谢谢!

4

1 回答 1

0

我在按钮监听器中发现了问题:

case 0: //Start button
    sends = 1;
    mSensorManager.registerListener(BluetoothChat.this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    break;

它仅在第一次单击后有效,因为 mAcceleromter 在第一次单击时未初始化。为了解决这个问题,我只是交换了这两行。

case 0: //Start button
    sends = 1;
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(BluetoothChat.this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
    break;

现在它在第一次按下按钮时起作用。

于 2013-08-28T19:34:22.160 回答