Android蓝牙自动配对
博客专区 > houj 的博客 > 博客详情
Android蓝牙自动配对
houj 发表于4年前
Android蓝牙自动配对
  • 发表于 4年前
  • 阅读 175
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: Android蓝牙自动配对示例代码

Android蓝牙自动配对

蓝牙权限配置

<uses-permission android:name="android.permission.BLUETOOTH" >       //使用蓝牙的权限 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" >       //管理蓝牙的权限 

获取蓝牙适配器

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

检查手机的蓝牙设备是否打开,未打开则  强制  打开蓝牙设备

public static void openBluetooth(){  
   if(adapter != null){  
      if(!adapter.isEnabled()){  
         adapter.enable();//强制开启蓝牙 
      }  
   }  
}

获得给定地址的远程蓝牙设备

BluetoothDevice device = adapter.getRemoteDevice(strAddress);

检查远程蓝牙设备是否已经配对,若没配对则进行配对

if(device.getBondState() != BluetoothDevice.BOND_BONDED){//判断给定地址下的device是否已经配对 
   try{  
      ClsUtils.autoBond(device.getClass(), device, strPin);//设置pin值 
      ClsUtils.createBond(device.getClass(), device);  
      remoteDevice = device;  
   }  
   catch (Exception e) {  
      // TODO: handle exception 
      System.out.println("配对不成功");  
   }  
}else{  
   remoteDevice = device;  
}  
  
//自动配对设置Pin值 
static public boolean autoBond(Class btClass,BluetoothDevice device,String strPin) throws Exception {   
   Method autoBondMethod = btClass.getMethod("setPin",new Class[]{byte[].class});  
   Boolean result = (Boolean)autoBondMethod.invoke(device,new Object[]{strPin.getBytes()});  
   return result;  
}  
  
//开始配对 
static public boolean createBond(Class btClass,BluetoothDevice device) throws Exception {   
   Method createBondMethod = btClass.getMethod("createBond");   
   Boolean returnValue = (Boolean) createBondMethod.invoke(device);   
   return returnValue.booleanValue();   
}

因为在SDK 中没有 autoBond和createBond方法,所以需要用java的反射机制去调用这两个函数。

这里可以用反射机制枚举BluetoothDevice的所以方法和常量
static public void printAllInform(Class clsShow) {   
    try {   
        // 取得所有方法 
        Method[] hideMethod = clsShow.getMethods();   
        int i = 0;   
        for (i; i < hideMethod.length; i++) {   
            Log.e("method name", hideMethod[i].getName());   
        }   
        // 取得所有常量 
        Field[] allFields = clsShow.getFields();   
        for (i = 0; i < allFields.length; i++) {   
            Log.e("Field name", allFields[i].getName());   
        }   
    } catch (SecurityException e) {   
        // throw new RuntimeException(e.getMessage()); 
        e.printStackTrace();   
    } catch (IllegalArgumentException e) {   
        // throw new RuntimeException(e.getMessage()); 
        e.printStackTrace();   
    } catch (Exception e) {   
        // TODO Auto-generated catch block 
        e.printStackTrace();   
    }   
}

配对成功后,手机作为客户端建立一个BluetoothSocket类来连接远程设备,然后调用connect()方法去尝试一个面向远程设备的连接。

public static final String CONTENT_UUID = "00001101-0000-1000-8000-00805F9B34FB";  
UUID uuid = UUID.fromString(Contents.CONTENT_UUID);         //UUID表示串口服务 
 //客户端建立一个BluetoothSocket类去连接远程蓝牙设备 
bluetoothSocket = remoteDevice.createRfcommSocketToServiceRecord(uuid);  
bluetoothSocket.connect();//尝试连接 
inputStream = bluetoothSocket.getInputStream();//打开IO流 
System.out.println("--inputStream------");  
if(inputStream != null){  
      connect_result = true;  
      System.out.println("----连接成功-----");  
}
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 7
博文 81
码字总数 57985
×
houj
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: