android蓝牙连接问题,Android蓝牙连接问题

我尝试设置蓝牙连接如下:

private class ConnectThread extends Thread {

private final BluetoothSocket mmSocket;

private final BluetoothDevice mmDevice;

BluetoothSocket connection = null;

public ConnectThread(BluetoothDevice device) {

mmDevice = device;

// Get a BluetoothSocket for a connection with the

// given BluetoothDevice

try {

if(D) Log.i(TAG, "createRfcommSocket");

Method m = mmDevice.getClass().getMethod("createRfcommSocket",new Class[] { int.class });

connection = (BluetoothSocket) m.invoke(mmDevice, 1);

Utils.pause(100);

} catch (Exception e) {

Log.e(TAG, "create() failed", e);

}

if(D) Log.i(TAG,"Bluetooth socket initialised");

mmSocket = connection;

}

public void run() {

if(D) Log.i(TAG, "BEGIN mConnectThread on Device : " + mmDevice);

setName("ConnectThread");

if (mmSocket != null) {

// Always cancel discovery because it will slow down a connection

if(mAdapter.isDiscovering()) {

if(D) Log.i(TAG, "stop discovering before trying to connect");

mAdapter.cancelDiscovery();

}

// Make a connection to the BluetoothSocket

try {

// This is a blocking call and will only return on a

// successful connection or an exception

if(D) Log.i(TAG, "start Bluetooth socket connection");

mmSocket.connect();

if(D) Log.i(TAG, "end of Bluetooth socket connection");

} catch (Exception e1) {

Log.e(TAG, "connect failed", e1);

connectionFailed();

// Reset the socket

resetConnection(mmSocket);

// Start the service over to restart listening mode

if(D) Log.i(TAG, "restart connection");

BluetoothConnectionService.this.start();

if(D) Log.i(TAG, "return");

return;

}

// Start the connected thread

if(D) Log.i(TAG, "The device is considered as connected, call connected thread");

connected(mmSocket, mmDevice);

} else {

if(D) Log.i(TAG, "connection fail");

connectionFailed();

BluetoothConnectionService.this.start();

}

}

public void cancel() {

if(D) Log.i(TAG,"connect thread cancel");

resetConnection(mmSocket);

}

}

连接似乎是可以的,我得到这个日志:

DEBUG/BluetoothConnectionService(3439): **connect to: 00:18:E4:21:8B:5E**

INFO/BluetoothConnectionService(3439): createRfcommSocket

INFO/BluetoothConnectionService(3439): Bluetooth socket initialised

INFO/BluetoothConnectionService(3439): BEGIN mConnectThread on Device : 00:18:E4:21:8B:5E

INFO/BluetoothConnectionService(3439): **start Bluetooth socket connection**

INFO/BluetoothConnectionService(3439): setState() 1 -> 2

INFO/ProtectionService(3439): MESSAGE_STATE_CHANGE: 1

DEBUG/ProtectionService(3439): STATE_CHANGED to STATE_LISTEN

INFO/ProtectionService(3439): MESSAGE_STATE_CHANGE: 2

DEBUG/abtfilt(2772): **Conn complete**

INFO/bluetoothd(2776): link_key_request (sba=24:21:AB:F4:69:25, dba=00:18:E4:21:8B:5E)

INFO/bluetoothd(2776): link_key_request (sba=24:21:AB:F4:69:25, dba=00:18:E4:21:8B:5E)

INFO/BluetoothConnectionService(3439): **end of Bluetooth socket connection**

INFO/BluetoothConnectionService(3439): **The device is considered as connected, call connected thread**

BluetoothSocket.connect()返回没有错误.

然后我用这个管理连接:

private class ConnectedThread extends Thread {

private final BluetoothSocket mmSocket;

private final InputStream mmInStream;

private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {

if(D) Log.d(TAG, "create ConnectedThread");

mmSocket = socket;

// Get the BluetoothSocket input and output streams

try {

if(D) Log.i(TAG, "Get input stream");

tmpIn = socket.getInputStream();

if(D) Log.i(TAG, "Get output stream");

tmpOut = socket.getOutputStream();

if(D) Log.i(TAG, "isConnected = true");

isConnected = true;

} catch (IOException e) {

Log.e(TAG, "Input and Output sockets not created", e);

isConnected = false;

}

mmInStream = tmpIn;

mmOutStream = tmpOut;

}

public void run() {

if(D) Log.i(TAG, "BEGIN mConnectedThread");

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

if(D) Log.i(TAG, "start read mmInStream");

bytes = mmInStream.read(buffer);

if(D) Log.i(TAG, "Bytes read : "+bytes);

// Send the obtained bytes to the UI Activity

mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();

} catch (IOException e) {

Log.e(TAG, "ConnectedThread : disconnected", e);

break;

}

}

}

/**

* Write to the connected OutStream.

*

* @param buffer

* The bytes to write

*/

public void write(byte[] buffer) {

try {

mmOutStream.write(buffer);

// Share the sent message back to the UI Activity

mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, buffer).sendToTarget();

// mmOutStream.flush();

} catch (IOException e) {

Log.e(TAG, "Exception during write", e);

connectionFailed();

}

}

public void cancel() {

if(D) Log.i(TAG,"connected Thread cancel");

resetConnection(mmSocket);

}

}

我收到这个错误:

DEBUG/BluetoothConnectionService(3439): create ConnectedThread

INFO/BluetoothConnectionService(3439): Get input stream

INFO/BluetoothConnectionService(3439): Get output stream

INFO/BluetoothConnectionService(3439): isConnected = true

INFO/BluetoothConnectionService(3439): BEGIN mConnectedThread

INFO/BluetoothConnectionService(3439): start read mmInStream

INFO/BluetoothConnectionService(3439): setState() 2 -> 3

INFO/ProtectionService(3439): MESSAGE_STATE_CHANGE: 3

DEBUG/ProtectionService(3439): connectionEstablished

**ERROR/BluetoothConnectionService(3439): ConnectedThread : disconnected

ERROR/BluetoothConnectionService(3439): java.io.IOException: Software caused connection abort

ERROR/BluetoothConnectionService(3439): at android.bluetooth.BluetoothSocket.readNative(Native Method)

ERROR/BluetoothConnectionService(3439): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:307)

ERROR/BluetoothConnectionService(3439): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)

ERROR/BluetoothConnectionService(3439): at java.io.InputStream.read(InputStream.java:133)**

INFO/ProtectionService(3439): Send Bluetooth message

**ERROR/BluetoothConnectionService(3439): Exception during write

ERROR/BluetoothConnectionService(3439): java.io.IOException: Transport endpoint is not connected

ERROR/BluetoothConnectionService(3439): at android.bluetooth.BluetoothSocket.writeNative(Native Method)

ERROR/BluetoothConnectionService(3439): at android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:317)**

当我这样做时,错误显然来了:

bytes = mmInStream.read(buffer);

我究竟做错了什么 ?我正在处理这个错误一周,我不能通过…

任何帮助将非常apreciated!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值