Classic Bluetooth 学习记录

本文详细介绍了经典蓝牙在Android平台上的应用,包括BluetoothAdapter、BluetoothDevice等关键类的使用,如蓝牙配对、取消配对、信号强度的获取。同时讲解了蓝牙设备的搜索、连接以及数据的读写和转换。蓝牙信号强度的判断标准和距离转换公式也有提及。
摘要由CSDN通过智能技术生成
蓝牙常用类及常用方法
BluetoothAdapter 蓝牙适配器
  • cancelDiscovery() 取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索,在销毁蓝牙广播前或与服务器连接前使用。
  • disable() 关闭蓝牙
  • enable() 打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:
    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(intent, requestCode);
  • getAddress() 获取本地蓝牙地址
  • getDefaultAdapter() 获取默认BluetoothAdapter,唯一一个。
  • getName() 获取本地蓝牙名称
  • getRemoteDevice(String address) 根据蓝牙地址获取远程蓝牙设备
  • getState() 获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)
  • isDiscovering() 判断当前是否正在查找设备,是返回true
  • isEnabled() 判断蓝牙是否打开,已打开返回true,否则,返回false
  • listenUsingRfcommWithServiceRecord(String name,UUID uuid) 根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
  • startDiscovery()开始搜索,startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。
    请求Discovery后,系统开始搜索蓝牙设备,在这个过程中,系统会发送以下三个广播:
    ACTION_DISCOVERY_START:开始搜索
    ACTION_DISCOVERY_FINISHED:搜索结束
    ACTION_FOUND:找到设备,这个Intent中包含两个extra fields:EXTRA_DEVICE和EXTRA_CLASS,分别包含BluetooDevice和BluetoothClass。

BluetoothDevice 描述了一个蓝牙设备
  • createRfcommSocketToServiceRecord(UUIDuuid) 根据UUID创建并返回一个BluetoothSocket
  • getState() 蓝牙状态这里要说一下,只有在 BluetoothAdapter.STATE_ON 状态下才可以监听,具体可以看andrid api;
  • 这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter

BluetoothServerSocket

这个类一种只有三个方法两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接。


BluetoothSocket

跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到。

  • close(), 关闭
  • connect() 连接
  • getInptuStream() 获取输入流
  • getOutputStream() 获取输出流
  • getRemoteDevice() 获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备

BluetoothClass 描述了设备通用特性和功能的蓝牙类
  • class BluetoothClass.Device 定义所有设备类的常量
  1. public int getDeviceClass () 返回BluetoothClass中的设备类部分(主要的和较小的)
  2. public int getMajorDeviceClass () 返回BluetoothClass中设备类的主要部分
  • class BluetoothClass.Service 定义所有服务类的常量

蓝牙配对与取消配对
  • 蓝牙配对:
if (device.getBondState() == BluetoothDevice.BOND_NONE) {
   
            //版本号大于23,可以直接用device.createBond(),小于23时则用反射
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
   
                device.createBond();
                adapter.notifyDataSetChanged();
            } else {
   //适配
                try {
   
                    Method method = BluetoothDevice.class.getMethod("createBond");
                    method.invoke(device);
                    adapter.notifyDataSetChanged();
                } catch 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值