文档章节

Android蓝牙自动配对

h
 houj
发布于 2014/09/30 16:21
字数 491
阅读 182
收藏 0

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("----连接成功-----");  
}

本文转载自:

共有 人打赏支持
h
粉丝 8
博文 81
码字总数 57985
作品 0
长沙
技术主管
私信 提问
Android深入浅出系列之Bluetooth—蓝牙操作(一)

  一:什么是蓝牙     1:Bluetooth是目前使用最广泛的无线通讯协议,近距离无线通讯的标准。传说瑞典有个国王特别爱吃蓝莓导致自己的牙齿天天都是蓝色的,在他执政期间这位国王非常善...

芋头被人用掉了
2015/05/19
0
0
如何实现android蓝牙开发 自动配对连接,并不弹出提示框

之前做一个android版的蓝牙 与血压计通讯的项目,遇到最大的难题就是自动配对. 上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了 我就开始...

补全
2012/06/19
0
18
android 蓝牙程序控制绑定与删除绑定

如何实现android蓝牙开发 自动配对连接,并不弹出提示框 (2013-01-05 15:27:36) 转载▼ 标签: 杂谈 分类: 转摘文章 我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助...

andyhe91
2014/08/06
0
1
linux bluetooth

在android下能做到蓝牙通信时自动配对,那么在linux下应该也有方法可以实现自动配对的,最近尝试了好多方法都不可以,当linux上的蓝牙dongle做为服务端的时候,通过设置固定的pin码,可以做到...

北极看月亮
2014/05/13
89
0
Android蓝牙开发—经典蓝牙详细开发流程

Android蓝牙开发前,首先要区分是经典蓝牙开发还是BLE(低功耗)蓝牙开发,它们的开发是有区别的,如果还分不清经典蓝牙和BLE(低功耗)蓝牙的小伙伴,可以先看Android蓝牙开发—经典蓝牙和B...

天王盖地虎626
01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
20分钟前
1
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
26分钟前
1
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
29分钟前
1
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
34分钟前
1
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部