文档章节

Android蓝牙自动配对

h
 houj
发布于 2014/09/30 16:21
字数 491
阅读 176
收藏 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
粉丝 7
博文 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
Android Bluetooth 学习(2)应用层实现蓝牙设备查找、tcp_ip通信

Bluetooth结构 1、JAVA层 frameworks/base/core/java/android/bluetooth/ 包含了bluetooth的JAVA类。 2、JNI层 frameworks/base/core/jni/androidbluetooth开头的文件 定义了bluez通过JNI到上......

zhoulc
2013/03/18
0
0
大象也能起舞,Citrix X1计划让你对笔记本电脑say good bye

最近股市特别火,大家都在说牛市来了,不过股市上涨最快的不是那些小盘股票,而是那些动辄就是千亿元以上市值的大盘股,比如两桶油。这些股票可算是股票中的大象。在几个月前没有人能够想象这...

rind
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring 容器实现对bean的管理(注解方式解析,源码阅读)

因为最近在研究学习spring boot,所以这里想详细学习回顾了一下spring 容器对bean的一些管理方式和部分源码学习。 首先初始类AnnotationConfigApplicationContext,简单源码查看,支持两个参...

小海bug
10分钟前
0
0
数据结构:二分查找 java

二分查找的前提是有序存储,利用顺序存储和元素排序 /** * 二分查找,查找成功,返回下标记 * @param values * @param begin * @param end * @param key * @param <T> * @ret...

京一
28分钟前
0
0
@SpringBootApplication 注解

@SpringBootApplication注解是一个组合注解,包含以下注解 @Target(ElementType.TYPE) 注解的作用目标 @Retention(RetentionPolicy.RUNTIME) Reteniton的作用是定义被它所注解的注解保留多久,...

java.刘
41分钟前
0
0
sentinel自定义DataSource实战

序 本文主要研究一下如何自定义sentinel的DataSource,这里以jdbc为例。 maven <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sen......

go4it
56分钟前
1
0
xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。用RandomForest所需要的树的深度和Decisio...

tantexian
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部