先贴一下我连接的代码,有点乱
开启蓝牙连接,由于连接是耗时的,所以肯定新开一个线程去连接,以下是连接的代码`package

/**
* Created by lyl on 2017/8/6.
*/

public class ConnectThread extends Thread {
private BluetoothDevice btd;
private BluetoothSocket bts;
private BluetoothController mController;
//00001101-0000-1000-8000-00805f9b34fb
public static final String MY_UUID = “00001101-0000-1000-8000-00805F9B34FB”;
private InputStream in;
private OutputStream out;
private static byte read_byts[] = new byte[120];
public static boolean isConnected = false;

public ConnectThread(BluetoothDevice btd) {    BluetoothSocket temp = null;    mController = new BluetoothController();    this.btd = btd;    try {        temp = btd.createInsecureRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));    } catch (IOException e) {        e.printStackTrace();    }    bts = temp;}private static android.os.Handler handler = new android.os.Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        if (msg.what == 1) {        }    }};@Overridepublic void run() {    super.run();    //取消搜索因为搜索会让连接变慢    mController.getmAdapter().cancelDiscovery();    try {        //通过socket连接设备,这是一个阻塞操作,直到连接成功或发生异常        Log.e(TAG, "run: 连接1");        Log.e(TAG, "当前线程2:" + Thread.currentThread());       // bts.connect();        bts=connectBtByChannel(btd);        Log.e(TAG, "run: 连接2");        Log.e(TAG, "run: 连接成功" );        if (bts.isConnected()) {            isConnected = true;            in = bts.getInputStream();            out = bts.getOutputStream();        }    } catch (IOException e) {        Log.e(TAG, "run: 连接3——————————————————————》" + e.getMessage());        Log.e(TAG, "run: 连接3");        //无法连接,关闭socket并且退出        System.out.println("=========拒绝");        try {            bts.close();        } catch (IOException e1) {            e1.printStackTrace();        }    } catch (NoSuchMethodException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    } catch (InvocationTargetException e) {        e.printStackTrace();    }    while (isConnected) {        try {            Log.e(TAG, "当前线程:" + Thread.currentThread());            int len = in.read(read_byts);            if (len != -1) {                Message me = Message.obtain();                me.what = 1;                handler.sendMessage(me);            }        } catch (IOException e) {            e.printStackTrace();        }    }    //管理连接(在独立的线程)    // manageConnectedSocket(mmSocket);}/* Call this from the main activity to send data to the remote device */public void write(byte[] bytes) {    try {        out.write(bytes);    } catch (IOException e) {    }}public void cancel() {    try {        bts.close();    } catch (IOException e) {        e.printStackTrace();    }}private static int port = 0;/** * 通过反射原理,使用随机端口发起蓝牙连接 */public BluetoothSocket connectBtByChannel(BluetoothDevice mBluetoothDevice) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IOException, InvocationTargetException {    Method method = mBluetoothDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class});    port = port++ % 30;    if (port == 0) {        port = 1;    }    BluetoothSocket mBluetoothSocket = (BluetoothSocket) method.invoke(mBluetoothDevice, port);//1-30端口    mBluetoothSocket.connect();//发起连接    return mBluetoothSocket;}/** * 通过反射原理,发起蓝牙连接 * */public BluetoothSocket connectBtBySco(BluetoothDevice mBluetoothDevice) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IOException{    Method method = mBluetoothDevice.getClass().getMethod("createScoSocket");    BluetoothSocket mBluetoothSocket = (BluetoothSocket)method.invoke(mBluetoothDevice);    mBluetoothSocket.connect();//发起连接    return mBluetoothSocket;}/**未配对过的,在连接建立之前先配对 * [url=home.php?mod=space&uid=2643633]@throws[/url] Exception */public void createBond(BluetoothDevice mBluetoothDevice) throws Exception{    try {        // 连接建立之前的先配对        if (mBluetoothDevice.getBondState() == BluetoothDevice.BOND_NONE) {            Method creMethod = BluetoothDevice.class.getMethod("createBond");            Log.i("BluetoothManager", "开始配对");            creMethod.invoke(mBluetoothDevice);        }    } catch (Exception e) {        // TODO: handle exception        //DisplayMessage("无法配对!");        e.printStackTrace();        throw new Exception("Can't createBond with this device,please try again");    }}

}
一开始我是使固定的UUID去获取一个BlueToothSocket
temp = btd.createInsecureRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
拿到之后进行连接
bts.connect();
但是不知道什么原因一直返回
read failed, socket might closed or timeout, read ret: -1
可能是UUID的问题吧。
然后百度一下这个问题,也有很多人都碰到过这个问题,用了其中一个人的解决办法
地址是[http://www.eoeandroid.com/thread-913808-1-2.html?_dsign=16c362c1]得到了解决

更多相关文章

  1. android线程池的封装工具类
  2. Android BlueDroid(二):BlueDroid蓝牙开启过程init
  3. Android正确关闭线程
  4. Android 蓝牙开发(九)A2DP基本功能
  5. Android 主线程子线程执行关系
  6. android低功耗蓝牙APP开发问题记录
  7. [置顶] 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解
  8. Android中工作线程与主线程同步方式
  9. Android 关闭线程(转)

随机推荐

  1. Android粉丝眼中iOS 7与Android(安卓)4.2
  2. Android(安卓)录音实现追踪(Android(安卓)
  3. Android(安卓)修改spinner 字体颜色 样式
  4. Android的线程和线程池
  5. Android的Socket通信编程实例
  6. Android(安卓)开发艺术探索笔记之三 -- V
  7. 抓包工具Fidder详解(主要来抓取Android中
  8. android消息机制
  9. 《Android(安卓)串口驱动回眸:andriod虚拟
  10. Android(安卓)内存泄漏调试