蓝牙通讯录协议未连接(蓝牙通讯地址怎么查)
一、蓝牙介绍: (一)、Bluetooth的由来及现状
蓝牙一词源于公元十世纪丹麦国王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。这是因为这位让丹麦人引以为傲的国王酷爱吃蓝莓以至于牙龈都被染成蓝色。由于Blatand统一了丹麦和挪威,所以,作为无线通信技术的一种,蓝牙技术之所以取名Bluetooth可谓志向远大。
不过,在以Android为代表的智能机出现以前,蓝牙在早期智能机甚至功能机中一直扮演着“鸡肋”的角色。那么,随着无线通信技术的快速发展以及Android的普及,蓝牙技术在我们生活中的应用也越来越多,包括蓝牙耳机和鼠标,及蓝牙局域网应用(聊天、游戏等)。
(二)、蓝牙规范介绍
Core Specification(核心规范)
作用:用于规定蓝牙设备必须实现的通用功能和协议层次。它由软件和硬件模块组成,两个模块之间的信息和数据通过主机控制接口(HCI)的解释才能进行传递
核心规范是蓝牙协议家族的基础,自蓝牙技术联盟(Bluetooth SIG,Special Interest Group)在1999年颁布蓝牙核心规范1.0版本以来,到目前为止蓝牙SIG一共发布了七个重要版本。每一个版本都促使蓝牙技术朝着更快、更安全、更省电的方向发展。
二、蓝牙的用法 (一)、蓝牙API
Android所有关于蓝牙开发的类都在android.bluetooth包下,只有8个类:
BluetoothAdapter 本地蓝牙适配器 BluetoothClass 蓝牙类(主要包括服务和设备) BluetoothClass.Device 蓝牙设备类 BluetoothClass.Device.Major 蓝牙设备管理 BluetoothClass.Service 蓝牙服务类 BluetoothDevice 蓝牙设备(远程蓝牙设备) BluetoothServiceSocket 监听蓝牙连接的类 BluetoothSocket 蓝牙连接类 1、BluetoothAdapter :
表示本地的蓝牙适配器 (蓝牙射频)。BluetoothAdapter 是为所有蓝牙交互的入口点。它可以发现其他蓝牙设备、 查询绑定 和创建 BluetoothServerSocket 用于侦听来自其他设备的通信。直到我们建立bluetoothSocket连接之前,都要不断操作它 。BluetoothAdapter里的方法很多,常用的有以下几个:
cancelDiscovery
isDiscovering。为了连接两台 Android 设备,一台设备必须用此类打开一个服务器套接字。当远程蓝牙设备向此设备发出连接请求时,而且当连接被接收时,BluetoothServerSocket 将返回连接的 BluetoothSocket。这个类有三个方法。
accept,都会阻塞线程,应该放在新线程里运行! 还需要注意,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端这两个BluetoothSocket的连接。
close 的接口。这是一个允许应用程序与另一台蓝牙设备通过InputStream和OutputStream来交换数据的连接点。其一共5个方法,一般都会用到。
close 的配置文件
8、BluetoothA2dp
定义了如何高质量的音频可以进行流式处理从一个设备到另一个通过蓝牙连接。”A2DP”代表先进音频分配协议
9、BluetoothHealth
表示控制蓝牙服务健康设备协议
10、BluetoothHealthCallback
BluetoothHealthCallback 一个抽象类,您使用来实现 BluetoothHealth 回调,你必须扩展此类并实现回调方法以接收有关更改的更新应用程序的注册和蓝牙通道状态。BluetoothHealthAppConfiguration 表示一个蓝牙健康第三方应用程序注册与远程蓝牙健康设备进行通信的应用程
11、BluetoothHealthAppConfiguration
表示一个蓝牙健康第三方应用程序注册与远程蓝牙健康设备进行通信的应用程序配置
12、BluetoothProfile.ServiceListener
通知 BluetoothProfile IPC 客户端界面时已被连接或断开服务 (即运行一个特定的配置文件内部服务)
(二)、使用蓝牙的权限 <uses-permissionandroid:name="android.permission.BLUETOOTH"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>(三)、 UUID(universal unique identifier , 全局唯一标识符)
格式如下:UUID格式一般是”xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,可到http://www.uuidgenerator.com 申请。UUID分为5段,是一个8-4-4-4-12的字符串,这个字符串要求永不重复。
String uuid = java.util.UUID.randomUUID、使用蓝牙的步骤:【五步曲】 1、获取本地蓝牙适配器
BluetoothAdapter mAdapter= BluetoothAdapter.getDefaultAdapter支持的蓝牙连接是通过BluetoothSocket建立连接,服务器端(BluetoothServerSocket)和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接
1)服务器端:BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord获取流inputStream = socket.getInputStream写出、读入BluetoothServerSocketBluetoothServerSocket BluetoothAdapter.listenUsingRfcommWithServiceRecord、服务器端程序制作步骤:
1、服务器线程
构造方法,创建BluetoothServerSocket对象;
通过bluetoothAdapter 的listenUsingRfcommWithServiceRecord、客户端程序制作步骤:
1、客户端线程
构造方法,初始化BluetoothDevice,连接选择的设备,建立连接,并获取客户端套接字对象的输入、输出流对象;
this.bluetoothDevice = device;clientSocket = bluetoothDevice .createRfcommSocketToServiceRecord(MainActivity.MY_UUID); clientSocket.connect();is = newDataInputStream(clientSocket.getInputStream());os = newDataOutputStream(clientSocket.getOutputStream());
重写run()方法。死循环中,读取客户端输入流数据,追加到聊天记录中。
String info = is.readUTF();appendContent(info);
自定义sendInfo()消息发送方法。
os.writeUTF(info);
2、发送消息线程
构造方法,初始化要发送的信息数据;
this.info = info;
重写run()方法。调用连接线程的sendInfo()方法,向服务器端发送数据 。
clientThread.sendInfo(info);
大家都在看