android 开发之 Bluetooth

原创 2015年11月18日 00:11:04
android  蓝牙串口连接代码


  BluetoothSocket tmp =null;

  // Get a BluetoothSocket for a  connection with the
  // given BluetootDevice

  try{
         tmp= device.createRfcommSocketToServiceRecord

(MY__UUID);


}catch(IOException e)
{
   log.e( TAG, "create() failed", e);

}


  然后是tmp 赋给 BluetoothSocket,接着调用connect 方法进行

蓝牙设备的连接。

   可是BluetoothSocket的connect的方法本身会报很多异常错误
   以下根据对蓝牙的一点研究可以通过一下方法解决:
   1.先进行蓝牙自动配对,配对成功,通过BluetoothSocket,然

后执行connect()方法。
    2. 通过 UUID 获得BluetoothSocket,然后先根据

mDevice.getBondState() 进行判断是否需要配对,最后执行

connect() 方法。

 
蓝牙连接线程

private class ConnectThread extends Thread
{
   String macAddrss="";
 public ConnectThread(String mac)
{
   macAddress=mac;

}
  public void run()
{
   connecting=true;
   connected=false;
if(  mBluetoothAdapter==null)
{
   mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();


}

    mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(macAddress);
 mBluetoothAdapter.cancelDiscovery();


try{

    socket = mBluetoothDevice.createRfcommSocketToServiceRecord(uuid);

}catch{IOException e}

Log.e(TAG, "Socket", e);

}
   while(!connected && connetTime<=10)
{
      connectDevice();
}

     public void cancel()

{
    try{
     socket.close();
      socket=null;


}catch(Exception e)
{
       e.printStackTrace();


}finally{
    connecting=false;

}

}



}

 
接下来是调用的是连接 设备的方法  connectDevice();


protected void connectDevice()
{

    try{
//  连接建立之前的先配对

    if(mBluetoothDevice.getBondState()== BluetoothDevice.BOND_NONE)
{
    Method  creMethod= BluetoothDevice.class.getMethod("createBond");


       creMethod.invoke(mBluetoothDevice);


}else{



}


}catch(Exception e) { 
            // TODO: handle exception 
            //DisplayMessage("无法配对!"); 
            e.printStackTrace(); 


}

   mBluetoothAdapter.cancelDiscovery();

     try{
     socket.connet();
 //DisplayMessage("连接成功!");
            //connetTime++;
            connected = true;
        } catch (IOException e) { 
            // TODO: handle exception 
            //DisplayMessage("连接失败!");
            connetTime++;
            connected = false;
            try { 
                socket.close();
                socket = null;
            } catch (IOException e2) { 
                // TODO: handle exception 
                Log.e(TAG, "Cannot close connection when connection failed"); 
            } 
        } finally {
            connecting = false;
        } 



}

 

方法3.利用反射通过端口获得BluetoothSocket,然后执行connect()方法。

 

    /**
     * <p>
     * 蓝牙连接线程
     * </p>
     * 
     * @author lsw
     * 
     */
    private class ConnectThread extends Thread {
        String macAddress = "";

        public ConnectThread(String mac) {
            macAddress = mac;
        }

        public void run() {
            connecting = true;
            connected = false;
            if(mBluetoothAdapter == null){
                mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
            }
            mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(macAddress);
            mBluetoothAdapter.cancelDiscovery();
            initSocket();                         
            //adapter.cancelDiscovery();
            while (!connected && connetTime <= 10) {
                try {
                    socket.connect();
                    connected = true;
                } catch (IOException e1) {
                    connetTime++;
                    connected = false;
                    // 关闭 socket
                    try {
                        socket.close();
                        socket = null;
                    } catch (IOException e2) {
                        //TODO: handle exception  
                        Log.e(TAG, "Socket", e2);
                    }
                } finally {
                    connecting = false;
                }
                //connectDevice();
            }
            // 重置ConnectThread 
            //synchronized (BluetoothService.this) {
               //ConnectThread = null;
            //}
        }

        public void cancel() {
            try {
                socket.close();
                socket = null;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                connecting = false;
            }
        }
    }
复制代码

  接下来是初始化并得到BluetoothSocket的方法

  

复制代码
    /**
     * 取得BluetoothSocket
     */
    private void initSocket() {
        BluetoothSocket temp = null;
        try {            
            Method m = mBluetoothDevice.getClass().getMethod(
                    "createRfcommSocket", new Class[] { int.class });
            temp = (BluetoothSocket) m.invoke(mBluetoothDevice, 1);//这里端口为1            
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        socket = temp;
    }
复制代码

要点:1.蓝牙配对和连接是两回事,不可混为一谈。

   2.蓝牙串口连接可通过端口 (1-30)和UUID两种方法进行操作。

   3.通过UUID进行蓝牙连接最好先进行配对操作。


Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:and...
  • xubin341719
  • xubin341719
  • 2014年08月12日 20:01
  • 25082

Android Bluetooth蓝牙开发:Bluetooth蓝牙设备之间的连接建立(3)

 Android Bluetooth蓝牙开发:Bluetooth蓝牙设备之间的连接建立(3) Android Bluetooth蓝牙设备的连接编程模型和Java socket网络连接编程模型类...
  • zhangphil
  • zhangphil
  • 2016年01月21日 12:49
  • 6937

Android 蓝牙开发(一)蓝牙通信

随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。 总结了下蓝牙开发使用的一些东西分享一下。 首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。 允许程序连接到已配对...
  • VNanyesheshou
  • VNanyesheshou
  • 2016年06月07日 15:57
  • 35804

React Native ios android 开发指南_带书签_中文扫描完整版

  • 2017年12月28日 13:55
  • 61.78MB
  • 下载

Android 开发入门与实战 pdf

  • 2017年10月31日 14:26
  • 35.71MB
  • 下载

Android 开发教程

  • 2013年05月02日 22:36
  • 12.97MB
  • 下载

Android 开发范例代码大全(第2版)

  • 2014年05月21日 17:27
  • 8.94MB
  • 下载

Android 开发入门与实战 第二版 完全版pdf+源代码

  • 2014年12月22日 09:51
  • 54.88MB
  • 下载

android 开发jar 对model层和与服务器交互模块进行了封装

  • 2014年11月19日 11:06
  • 287KB
  • 下载

Android 开发环境搭建--入门级精细图解说明并解决常见问题(完整版)--201308.doc

  • 2013年08月22日 10:02
  • 3.37MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 开发之 Bluetooth
举报原因:
原因补充:

(最多只允许输入30个字)