连接到蓝牙设备时连接功能被阻止

时间:2012-12-30 07:17:03

标签: android bluetooth

我正在尝试从我的HTC Wildfire连接蓝牙设备,几个月前它工作正常并能够与蓝牙设备建立连接,但在更新HTC上的软件后,事情并不顺利

当代码像魅力一样工作时手机没有更新

bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(UUID_STRING);

更新我的手机后,我探索了一下,我发现了以下代码

 Method m = bluetoothDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
 bluetoothSocket = (BluetoothSocket) m.invoke(bluetoothDevice, Integer.valueOf(1));
 bluetoothSocket.connect();

但我的蓝牙连接被阻止 bluetoothSocket.connect()。而且代码无法达到 bluetoothSocket.getInputStream()bluetoothSocket.getOutputStream()

是否有人对此问题有任何解决方法,

我目前的HTC野火状态是

  1. android os 2.2.1
  2. 内部版本号2.25.720.4CL299259 release-keys

1 个答案:

答案 0 :(得分:0)

由于蓝牙连接过程耗时且无法预测到某个时间限制。

最好将连接放入

背景线程。

private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;

public ConnectThread(BluetoothDevice device) {
    // Use a temporary object that is later assigned to mmSocket,
    // because mmSocket is final
    BluetoothSocket tmp = null;
    mmDevice = device;

    // Get a BluetoothSocket to connect with the given BluetoothDevice
    try {
        // MY_UUID is the app's UUID string, also used by the server code
        tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
    } catch (IOException e) { }
    mmSocket = tmp;
   }

   public void run() {
    // Cancel discovery because it will slow down the connection
    mBluetoothAdapter.cancelDiscovery();

    try {
        // Connect the device through the socket. This will block
        // until it succeeds or throws an exception
        mmSocket.connect();
    } catch (IOException connectException) {
        // Unable to connect; close the socket and get out
        try {
            mmSocket.close();
        } catch (IOException closeException) { }
        return;
     }

    // Do work to manage the connection (in a separate thread)
    manageConnectedSocket(mmSocket);
   }

   /** Will cancel an in-progress connection, and close the socket */
   public void cancel() {
    try {
        mmSocket.close();
    } catch (IOException e) { }
   }
   }


   private class ConnectedThread extends Thread {
   private final BluetoothSocket mmSocket;
   private final InputStream mmInStream;
   private final OutputStream mmOutStream;

   public ConnectedThread(BluetoothSocket socket) {
    mmSocket = socket;
    InputStream tmpIn = null;
    OutputStream tmpOut = null;

    // Get the input and output streams, using temp objects because
    // member streams are final
    try {
        tmpIn = socket.getInputStream();
        tmpOut = socket.getOutputStream();
    } catch (IOException e) { }

    mmInStream = tmpIn;
    mmOutStream = tmpOut;
   }

   public void run() {
    byte[] buffer = new byte[1024];  // buffer store for the stream
    int bytes; // bytes returned from read()

    // Keep listening to the InputStream until an exception occurs
    while (true) {
        try {
            // Read from the InputStream
            bytes = mmInStream.read(buffer);
            // Send the obtained bytes to the UI Activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
      }
    }

    /* Call this from the main Activity to send data to the remote device */
    public void write(byte[] bytes) {
    try {
        mmOutStream.write(bytes);
       } catch (IOException e) { }
    }

   /* Call this from the main Activity to shutdown the connection */
    public void cancel() {
    try {
        mmSocket.close();
      } catch (IOException e) { }
     }
    }