文档章节

Android蓝牙自动配对

h
 houj
发布于 2014/09/30 16:21
字数 491
阅读 179
收藏 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
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
Android通过蓝牙发送数据到Windows PC电脑:Java实现

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83146705 Android通过蓝牙发送数据到Windows PC电脑:Java实现 Android手机设备之间通...

zhangphil
10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring之IOC和AOP学习摘要

一、IOC(Inversion of Control)或者依赖注入(Dependency Injection) 1、底层实现原理:反射 2、三大核心接口: BeanFactory:简单容器系列,只是实现了容器最基本的功能。 ApplicationC...

狠一点
21分钟前
4
0
缓存架构SpringBoot集成Curator实现zookeeper分布式锁

一、分布式锁简介 1、什么是锁 在单机环境下,当存在多个线程可以同时改变某个共享变量时,就需要同步来实现该功能,使其线程安全。 而同步就是通过锁来实现的。锁保证了同一时刻只有一个线程...

架构师springboot
23分钟前
1
0
11《Java核心技术》之Java提供了哪些IO方式? NIO如何实现多路复用?

一、提出问题 IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某些方面仍有不足,但已经...

飞鱼说编程
30分钟前
4
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

linuxprobe16
30分钟前
1
0
55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

1、Mysql用户管理; 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限; 语法: grant all on *.* to 'user'@'127.0.0.1' identified by 'password'; g...

芬野de博客
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部