2013-08-28 43 views
0

我试图通过蓝牙发送数据到另一台蓝牙设备。这是使用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]; 
} 

当你按下启动按钮,它设置一个标志,并启动监听器。停止按钮清除标志并停止监听器。但我似乎无法弄清楚为什么它不适用于第一个按钮。谢谢!

+0

你的“按钮侦听器”是一个'AdapterView'的项目点击侦听器? –

+0

对不起,它们不是实际的按钮,而是我基本上把它当作按钮的网格中的图像。当你点击图片时,onClick事件会触发。 – user2461391

+0

您没有发布实际打开连接套接字的代码。 –

回答

0

我发现在我的按钮侦听问题:

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

这是因为mAcceleromter wasn`t第一点击初始化首次点击后,才有效。为了解决这个问题,我只换了这两行。

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

现在它在第一个按钮按下。

+0

PLZ标记为答案。 –

+0

@Ritesh吉恩,需要2天的等待期 – user2461391

相关问题