蓝牙编程基础

合集下载

蓝牙bluez的编程CC++

蓝牙bluez的编程CC++

蓝⽛bluez的编程CC++蓝⽛ bluez 的编程 C C++简介bluez⽬录有⼀个libbluetooth.a⽂件有⼀个⽬录 lib⽬录⾥⾯存储这⽹络连接的部分代码基于库的代码编程.在linux下如果⾃带了蓝⽛,可以通过gcc **.c -lbluetooth 直接编出⼀个可执⾏⽂件.参考⽂献下⾯的连接提供了⼀个测试代码.另外,关于 ble 使⽤库的⽅式⼀直出现失败的情况,是因为,没有设置ble的相关参数,具体可以参考中的enable_advertising函数int device_id = hci_get_route(NULL);int device_handle = 0;if ((device_handle = hci_open_dev(device_id)) < 0) {perror("Could not open device");exit(1);}le_set_advertising_parameters_cp adv_params_cp = { 0 };adv_params_cp.min_interval = htobs(advertising_interval);adv_params_cp.max_interval = htobs(advertising_interval);adv_params_cp.chan_map = 7;uint8_t status;struct hci_request rq = { 0 };rq.ogf = OGF_LE_CTL;rq.ocf = OCF_LE_SET_ADVERTISING_PARAMETERS;rq.cparam = &adv_params_cp;rq.clen = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE;rq.rparam = &status;rq.rlen = 1;int ret = hci_send_req(device_handle, &rq, 1000);if (ret < 0) {hci_close_dev(device_handle);fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);return (1);}le_set_advertise_enable_cp advertise_cp = { 0 };advertise_cp.enable = 0x01;memset(&rq, 0, sizeof(rq));rq.ogf = OGF_LE_CTL;rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;rq.cparam = &advertise_cp;rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;rq.rparam = &status;rq.rlen = 1;ret = hci_send_req(device_handle, &rq, 1000);if (ret < 0) {hci_close_dev(device_handle);fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);return (1);}。

蓝牙模块c语言代码

蓝牙模块c语言代码

蓝牙模块的C语言代码取决于你使用的蓝牙模块型号以及你的具体需求。

不同的蓝牙模块可能使用不同的硬件接口和通信协议。

下面是一个简单的示例,展示了如何使用蓝牙模块进行数据传输。

请注意,这只是一个基本的示例,你需要根据你的具体硬件和需求进行修改。

首先,你需要包含必要的头文件和定义一些常量:c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <termios.h>#define BLUETOOTH_DEVICE "/dev/rfcomm0" // 蓝牙设备文件路径#define BAUDRATE B9600 // 波特率接下来,你可以编写一个函数来初始化蓝牙设备:cint initialize_bluetooth() {int fd;struct termios options;// 打开蓝牙设备文件fd = open(BLUETOOTH_DEVICE, O_RDWR | O_NOCTTY | O_NDELAY);if (fd == -1) {perror("open_port: Unable to open /dev/rfcomm0");return -1;}// 配置蓝牙设备fcntl(fd, F_SETFL, 0);// 获取当前配置tcgetattr(fd, &options);// 设置波特率cfsetispeed(&options, BAUDRATE);cfsetospeed(&options, BAUDRATE);// 设置数据位、停止位和校验位options.c_cflag |= (CLOCAL | CREAD);options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag |= CS8;// 设置流控制options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);// 设置输入模式options.c_iflag &= ~(IXON | IXOFF | IXANY);// 设置输出模式options.c_oflag &= ~OPOST;// 应用配置tcsetattr(fd, TCSANOW, &options);return fd;}然后,你可以编写一个函数来发送数据:cint send_data(int fd, const char *data) {int bytes_written = write(fd, data, strlen(data));if (bytes_written < 0) {perror("send_data: Error writing to socket");return -1;}return 0;}最后,你可以编写一个函数来接收数据:cint receive_data(int fd, char *buffer, int buffer_size) { int bytes_read = read(fd, buffer, buffer_size - 1);if (bytes_read < 0) {perror("receive_data: Error reading from socket");return -1;}buffer[bytes_read] = '\0'; // 添加字符串结束符return bytes_read;}现在,你可以在main函数中使用这些函数:cint main() {int fd;char buffer[256];// 初始化蓝牙设备fd = initialize_bluetooth();if (fd == -1) {printf("Failed to initialize bluetooth\n");return 1;}// 发送数据if (send_data(fd, "Hello, bluetooth!") == -1) {printf("Failed to send data\n");close(fd);return 1;}// 接收数据if (receive_data(fd, buffer, sizeof(buffer)) == -1) {printf("Failed to receive data\n");close(fd);return 1;}printf("Received data: %s\n", buffer);// 关闭蓝牙设备close(fd);return 0;}这个示例展示了如何使用蓝牙模块进行简单的数据传输。

Linux下Bluez的编程实现

Linux下Bluez的编程实现

(转自:/index.html)Linux下Bluez的编程实现1、蓝牙的各个协议栈的简介 (2)1.1、蓝牙技术 (2)1.1、蓝牙协议栈 (2)1.2、蓝牙技术的特点 (4)1.2.1、蓝牙协议栈体系结构 (4)1.2.2、蓝牙协议栈低层模块 (4)1.2.3、软件模块 (5)1.3、蓝牙的一些Profile (6)2、Bluez和D-Bus (7)2.1、Bluez和D-Bus体系结构 (7)2.2、D-Bus介绍 (9)2.3、Bluez的安全接口 (13)2.4、Bluez适配器接口 (15)2.5、Bluez配对 (16)2.6、Bluez绑定 (17)3、Bluez编程实现 (18)3.1、蓝牙开发关键技术剖析 (18)3.1.1、连接机制分析 (18)3.1.2、自动连接 (18)3.1.3、时钟设计 (19)3.1.4、配对列表管理 (20)3.1.5、蓝牙文件传输模式 (20)3.2、hci层介绍 (20)3.2.1、hci层介绍 (20)3.2.2、hci层编程 (21)3.3、L2CAP层编程 (25)3.3.1、L2CAP协议简介 (25)3.3.2、L2CAP编程方法 (26)3.4、SDP协议简介 (27)4、Openobex (28)4.1、Openobex简介 (28)4.2、Openobex与bluez编程实现 (29)5、Obexftp (32)5.1、obexftp简介 (32)5.2、基于Obexftp的应用程序开发 (32)6、参考资料 (32)1.1、蓝牙技术蓝牙(Bluetooth)技术是由Ericsson、IBM、Intel、Nokia和T oshiba公司于1998年5月共同提出开发的,并联合成立了蓝牙特殊利益小组(S IG),负责开发无线协议规范并设定交互操作的需求。

其本质是设备间的无线链接,意在于代替有线电缆。

1.1、蓝牙协议栈协议栈是指一组协议的集合,举个例子,把大象装到冰箱里,总共要3步。

汇编 ble 语法

汇编 ble 语法

汇编ble 语法全文共四篇示例,供读者参考第一篇示例:汇编BLE语法是一种用于编程蓝牙低功耗(Bluetooth Low Energy,BLE)设备的语言,它可以让开发者更轻松地控制蓝牙设备的行为。

在这篇文章中,我们将介绍汇编BLE语法的基本概念和语法规则,帮助读者更好地了解如何使用这种语言来开发蓝牙低功耗设备。

第一部分:汇编BLE语法的基本概念蓝牙低功耗(BLE)是一种用于在短距离通信中节省电能的技术,它被广泛应用于物联网设备、智能穿戴设备等领域。

汇编BLE语法是一种专门针对BLE设备编程的语言,它允许开发者直接控制BLE设备的寄存器、时钟等底层硬件。

汇编BLE语法与其他高级编程语言不同,它更接近机器语言,更注重对底层硬件的直接控制。

开发者需要熟悉BLE设备的寄存器结构、通信协议等细节才能正确地编写汇编BLE代码。

第二部分:汇编BLE语法的语法规则汇编BLE语法的语法规则相对简单,主要包括以下几个方面:1.指令集:汇编BLE语法中包含了一系列的指令,用于控制BLE设备的各种功能。

常见的指令包括数据传输指令、寄存器操作指令等。

2.寄存器:开发者可以通过访问BLE设备的寄存器来控制设备的行为。

不同的寄存器对应不同的功能,开发者需要了解每个寄存器的作用和取值范围。

3.数据类型:汇编BLE语法中通常使用二进制、十六进制等基本数据类型来表示数据,开发者需要了解这些数据类型的表示方法和计算规则。

第三部分:汇编BLE语法的实例代码下面是一个简单的汇编BLE代码示例,用于初始化一个BLE设备并发送一条数据:```SECTION .datamsg db "Hello BLE", 0len equ -msgSECTION .textglobal _start_start:mov r0, 0x00 ; 初始化BLE设备mov r1, 0x01 ; 选择数据发送通道mov r2, msg ; 将数据存储到寄存器mov r3, len ; 数据长度; 发送数据send_data:ldr r4, [r2], #1 ; 读取一个字节数据bluetooth_send r4 ; 发送数据subs r3, r3, #1 ; 数据长度减一cmp r3, #0 ; 判断数据发送是否完成bne send_databluetooth_send:;发送数据到BLE设备ret```以上代码通过初始化BLE设备,并发送一个包含"Hello BLE"字符串的数据包示例了如何使用汇编BLE语法编写代码的流程。

Android之Bluetooth(蓝牙)编程实现

Android之Bluetooth(蓝牙)编程实现
// 布局控件 private TextView mTitle; private EditText mInputEditText; private EditText mOutEditText; private EditText mOutEditText2; private Button mSendButton; private CheckBox HEXCheckBox; private Button breakButton; private CheckBox checkBox_sixteen; /*private ImageView ImageLogoView;*/
//HEXCheckBox = (CheckBox) findViewById(R.id.radioMale); /*****************************************************************/ /*****************************************************************/ /*****************************************************************/ breakButton = (Button) findViewById(R.id.button_break); // 得到当地的蓝牙适配器 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); /*****************************************************************/ /*****************************************************************/ /*****************************************************************/ // 初始化 CheckBox //checkBox_sixteen = (CheckBox) findViewById(R.id.checkBox_sixteen); /*****************************************************************/ /*****************************************************************/ /*****************************************************************/

ble 编程 c语言

ble 编程 c语言

ble 编程 c语言"BLE编程"即蓝牙低功耗(Bluetooth Low Energy)的编程,在C 语言中进行BLE编程是可能的。

为了在C语言中进行BLE编程,你需要使用相应的BLE库或框架,例如BlueZ、NimBLE等。

这是一个简单的示例,展示了如何在C语言中使用BlueZ库进行BLE编程:#include <stdio.h>#include <stdlib.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>int main() {inquiry_info* devices = NULL;int max_devices = 10;int num_devices;int adapter_id = hci_get_route(NULL);int device_id = hci_open_dev(adapter_id);if (device_id < 0) {perror("Error opening HCI device");exit(1);}devices = (inquiry_info*)malloc(max_devices * sizeof(inquiry_info));num_devices = hci_inquiry(device_id, 8, max_devices, NULL, &devices, IREQ_CACHE_FLUSH);if (num_devices < 0) {perror("Error during device inquiry");exit(1);}char addr[19] = {0};char name[248] = {0};for (int i = 0; i < num_devices; i++) {ba2str(&(devices + i)->bdaddr, addr);memset(name, 0, sizeof(name));if (hci_read_remote_name(device_id, &(devices + i)->bdaddr, sizeof(name), name, 0) < 0) { strcpy(name, "[unknown]");}printf("Device %d: %s - %s\n", i+1, addr, name);}free(devices);close(device_id);return 0;}请注意,上述示例使用Linux系统默认的BlueZ库来进行BLE设备的检测和获取名称的操作。

[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信2014-08-03 0个评论收藏我要投稿C#编程使笔记本蓝牙和外部设备蓝牙通信:其实配对以后,蓝牙就被模拟成了一个端口,我们可以用最简单的端口通讯来收发信息。

首先,在每次启动时,需要连接端口:[FORM初始化时获取所有的COM口,并加入下拉列表]复制代码1 public Form1()2 {3 InitializeComponent();45 //Get all port list for selection6 //获得所有的端口列表,并显示在列表内7 PortList.Items.Clear();8 string[] Ports = SerialPort.GetPortNames();910 for (int i = 0; i < Ports.Length; i++)11 {12 string s = Ports[i].ToUpper();13 Regex reg = new Regex("[^COM\\d]", RegexOptions.IgnoreCase |RegexOptions.Multiline);14 s = reg.Replace(s, "");1516 PortList.Items.Add(s);17 }18 if (Ports.Length > 1) PortList.SelectedIndex = 1;19 }复制代码[连接按钮事件:选中list中的被选中的COM口进行连接,如果连接成功就在状态栏显示蓝牙连接成功]复制代码1 private void ConnectButton_Click(object sender, EventArgs e)2 {3 if (!BluetoothConnection.IsOpen)4 {5 //Start6 Status = "正在连接蓝牙设备";7 BluetoothConnection = new SerialPort();8 ConnectButton.Enabled = false;9 BluetoothConnection.PortName = PortList.SelectedItem.ToString();10 BluetoothConnection.Open();11 BluetoothConnection.ReadTimeout = 10000;12 BluetoothConnection.DataReceived += newSerialDataReceivedEventHandler(BlueToothDataReceived);13 Status = "蓝牙连接成功";14 }15 }复制代码[蓝牙接收数据事件响应函数,在按钮连接事件中声明的该事件,用于响应蓝牙数据接收]复制代码1 private void BlueToothDataReceived(object o, SerialDataReceivedEventArgs e)2 {3 //int length = BluetoothConnection.ReadByte();4 Thread.Sleep(1000);5 int length = 13;6 BlueToothReceivedData = DateTime.Now.ToLongTimeString() + "\r\n";7 BlueToothReceivedData += "收到字节数:" + length + "\r\n";89 byte[] data = new byte[length];10 BluetoothConnection.Read(data,0,length);11 for (int i = 0; i < length; i++)12 {13 BlueToothReceivedData += string.Format("data[{0}] = {1}\r\n", i, data[i]);14 }15 //receive close message16 if (length == 3 && data[0] == 255 && data[1] == 255 && data[2] == 255)17 {18 //Stop19 Status = "正在断开蓝牙设备";20 BluetoothConnection.Close();21 BluetoothConnection.Dispose();22 BluetoothConnection = null;23 ConnectButton.Enabled = true;24 Status = "蓝牙断开成功";25 }26 }复制代码这里第4行让程序休息1是因为延时等待从设备把数据发送完全。

蓝牙键盘夜曲编程说明书

蓝牙键盘夜曲编程说明书

蓝牙键盘夜曲编程说明书随着技术的不断进步和智能设备的普及,蓝牙键盘已成为很多人工作和娱乐的必备工具。

而夜曲编程则是一种越来越流行的技术趋势,它允许程序员在安静的夜晚专注于编写代码。

本篇文章将向大家介绍如何使用蓝牙键盘进行夜曲编程。

蓝牙键盘是一种可以通过蓝牙技术连接到其他设备的无线键盘。

它具有轻巧、便携和高效的特点,可以连接到大多数智能手机、平板电脑和计算机等设备上。

使用蓝牙键盘进行夜曲编程可以提高工作效率,并让你在安静的夜晚享受编程的乐趣。

首先,使用蓝牙键盘进行夜曲编程需要确保你的设备支持蓝牙功能。

如果你的设备没有内置蓝牙模块,你可以购买一个外置的蓝牙适配器,并将其插入到 USB接口上。

一旦你的设备连接到蓝牙键盘,你就可以开始夜曲编程了。

为了更好地使用蓝牙键盘进行夜曲编程,有几个方面需要注意。

首先,确保你的键盘配对成功并连接到设备。

一般情况下,你只需要在设备的蓝牙设置中搜索并选中你的键盘,然后按照提示进行配对即可。

确保键盘的电量充足也是很重要的,以免在编程过程中出现断连或电量不足的情况。

其次,蓝牙键盘夜曲编程的另一个关键是选择合适的工作环境。

夜曲编程需要一个安静、舒适且充满灵感的环境。

适当的灯光和温度可以提高你的工作效率,保护你的眼睛和健康。

另外,为了提高工作效率,可以通过调整键盘的倾斜和高度,找到最适合自己手指的位置。

当你开始夜曲编程后,请确保尽量减少外界干扰。

关闭手机的通知和社交媒体程序,确保你的注意力完全集中在编程上。

良好的时间管理也很重要,为自己设定一个合理的工作时间和休息时间。

过长时间的连续工作会使你感到疲劳,降低工作效率。

适时休息并活动一下身体,可以让你更好地保持注意力和专注力。

此外,为了进一步提升编程的体验,你可以使用一些编程工具和软件。

例如,你可以选择一个适合你的代码编辑器,一款舒适的电脑椅子和一个良好的音乐播放器。

选择合适的音乐可以帮助你调整心情,激发创造力。

总的来说,蓝牙键盘夜曲编程是一种高效且愉悦的编程方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在移动设备上,联网的方式很多,也存在了很大的差异,包括速度,有效范围等等因素都会对网络有不同的要求,本文我们就先分析一下Ophone平台上如何通过蓝牙进行网络连接,进而使用蓝牙来开发一些小的游戏或者应用,这里我们先从最基础的开始,首先学习蓝牙编程,我在查看了android sdk之后,发现蓝牙聊天这个示例基本上已经包含了所有的蓝牙基础知识,但是学习实例之前,我们有必要介绍一下蓝牙的基础知识,我大概浏览了一下,没有看到过多介绍蓝牙开发包的使用的文章,因此我们这里会对Ophone平台中蓝牙开发包进行一个详细的介绍,后面则会通过一个蓝牙聊天程序来进行实际开发。

蓝牙API在OPhone平台中,蓝牙api主要存在于"android.bluetooth"包中,它提供了皆如扫描设备、连接设备以及对设备间的数据传输进行管理的类,这些类对蓝牙设备进行功能性管理,蓝牙模块API提供的应用包括一下几个方面:扫描其它蓝牙设备通过查询本地蓝牙适配器来匹配蓝牙设备建立RFCOMM(无线射频通信协议)的通道/端口从其他的蓝牙设备中连接到指定的端口传输数据到其他设备,或者从其他设备中接收数据如需运用这些API来执行蓝牙通信,应用程序必须声明BLUETOOTH许可。

对于皆如寻找设备请求等的一些附加功能,也同样需要BLUETOOTH_ADMIN许可。

比如本文所介绍的蓝牙聊天程序就包含了一下两个权限许可:view plain copy to clipboard print?在蓝牙包(android.bluetooth)中有存在了以下几个类和接口,下面我们看一下他们分别具有什么样的功能,如下表所示。

BluetoothServerSocket类以监听其它设备对本机的连接请求等。

如果要获得本地蓝牙适配器,只有一个唯一的方式就是调用getDefaultAdapter()函数,同时也只有获得了蓝牙适配器之后才能进一步的操作!下面我们将本地蓝牙适配器的api 整理成以下一个表格。

那么上面的表中所列出的都是一些常用的操作,我们在稍后实现蓝牙聊天程序时,都会介绍如何详细的使用这些api。

通常我们在使用一下代码请求使用蓝牙时,会弹出一个权限对话框,如图14-1所示。

view plain copy to clipboard print?图14-1 请求使用蓝牙的权限当我们在使用ACTION_REQUEST_DISCOVERABLE来请求蓝牙可见状态时,也会弹出一个对话框来让用户确认,如图14-2所示。

请求蓝牙可见代码如下:view plain copy to clipboard print?图14-2 请求蓝牙可见最后,当我们的蓝牙首次在配对时,同样会出现如图14-3所示的确认对话框。

这里,有几个方法需要说明一下,首先getDeviceClass()返回BluetoothClass.中的设备类部分,从函数中返回的值可以和在BluetoothClass.Device中的公共常量做比较,从而确定哪个设备类在这个蓝牙类中是被编码的;其次,getMajorDeviceClass()返回BluetoothClass.中设备类的主要部分,从函数中返回的值可以和在BluetoothClass.Device.Major中的公共常量做比较,从而确定哪个主要类在这个蓝牙类中是被编码的。

BluetoothClass.DeviceBluetoothClass.Device.MajorBluetoothClass.Service这三个类比较简单,主要是包含了一推常量,其中BluetoothClass.Device中的常量代表主要和较小的设备类部分(完整的设备类)的组合。

BluetoothClass.Device.Major的常量只能代表主要设备类。

而BluetoothClass.Service定义了所有服务类的常量。

由于这些常量的数量比较多,这里我们就不一一列举了,详细信息大家可以参考sdk文档中:view plain copy to clipboard print?注意:toSting()函数会返回该蓝牙设备的字符串表达式。

当我们在取得蓝牙地址时,一般会得到一个类似于"00:11:22:AA:BB:CC" 的字符串,如果用户明确需要蓝牙硬件地址以防以后toString()表达式会改变的话,用户总是需要使用getAddress()方法来获取蓝牙的地址。

getName()函数也只获取远程蓝牙设备的名称,当执行设备扫描的时候,本地适配器将自动寻找远程名称。

该方法只返回来自存储器中该设备的名称。

该类中大多数方法的使用都需要获得BLUETOOTH权限。

BluetoothServerSocket该类用于实现一个蓝牙的监听端口,蓝牙端口的监听接口和TCP端口类似:Socket和ServerSocket类。

在服务器端,使用BluetoothServerSocket类来创建一个监听服务端口。

当一个连接被BluetoothServerSocket所接受,它会返回一个新的BluetoothSocket 来管理该连接。

在客户端,使用一个单独的BluetoothSocket类去初始化一个外接连接和管理该连接。

最通常使用的蓝牙端口是RFCOMM,它是被Android API支持的类型。

RFCOMM是一个面向连接,通过蓝牙模块进行的数据流传输方式,它也被称为串行端口规范(Serial Port Profile,SPP)。

为了创建一个对准备好的新来的连接去进行监听BluetoothServerSocket类,使用BluetoothAdapter.listenUsingRfcommWithServiceRecord()方法。

然后调用accept()方法去监听该链接的请求。

在连接建立之前,该调用会被阻断,也就是说,它将返回一个BluetoothSocket类去管理该连接。

每次获得该类之后,如果不再需要接受连接,最好调用在BluetoothServerSocket类下的close()方法。

关闭BluetoothServerSocket类不会关闭这个已经返回的BluetoothSocket类BluetoothSocket类线程安全。

特别的,close()方法总会马上放弃外界操作并关闭服务器端口。

如果使用需要BLUETOOTH权限的许可。

我们后面将要介绍的蓝牙聊天服务则整需要使用该功能。

该类提供了一下一些常用操作方法。

accept()函数将在一个成功建立的连接上返回一个已连接的BluetoothSocket类。

每当该调用返回的时候,它可以在此调用去接收以后新来的连接。

close()方法可以用来放弃从另一线程来的调用。

close()将马上关闭端口,并释放所有相关的资源。

在其他线程的该端口中引起阻塞,从而使系统马上抛出一个IO异常。

关闭BluetoothServerSocket不会关闭接受自accept()的任意BluetoothSocket。

BluetoothSocket上面说过蓝牙端口监听接口和TCP端口类似:Socket和ServerSocket类。

在服务器端,使用BluetoothServerSocket类来创建一个监听服务端口。

当一个连接被BluetoothServerSocket所接受,它会返回一个新的BluetoothSocket来管理该连接。

在客户端,使用一个单独的BluetoothSocket类去初始化一个外接连接和管理该连接。

最通常使用的蓝牙端口是RFCOMM,它是被Android API支持的类型。

RFCOMM是一个面向连接,通过蓝牙模块进行的数据流传输方式,它也被称为串行端口规范(Serial Port Profile,SPP)。

为了创建一个BluetoothSocket去连接到一个已知设备,使用方法BluetoothDevice.createRfcommSocketToServiceRecord()。

然后调用connect()方法去尝试一个面向远程设备的连接。

这个调用将被阻塞指导一个连接已经建立或者该链接失效。

为了创建一个BluetoothSocket作为服务端(或者"主机"),查看BluetoothServerSocket文档。

每当该端口连接成功,无论它初始化为客户端,或者被接受作为服务器端,通过getInputStream()和getOutputStream()来打开IO流,从而获得各自的InputStream和OutputStream对象BluetoothSocket类线程安全。

特别的,close()方法总会马上放弃外界操作并关闭服务器端口。

如果使用需要BLUETOOTH权限的许可。

该类也就以下几个方法需要大家掌握。

connect()函数链接到远程设备时,该方法将阻塞,指导一个连接建立或者失效。

如果该方法没有返回异常值,则该端口现在已经建立。

当设备查找正在进行的时候,创建对远程蓝牙设备的新连接不可被尝试。

在蓝牙适配器上,设备查找是一个重量级过程,并且肯定会降低一个设备的连接。

使用cancelDiscovery()方法去取消一个外界的查询。

查询并不由活动所管理,而作为一个系统服务来运行,所以即使它不能直接请求一个查询,应用程序也总会调用cancelDiscovery()方法。

close()方法可以用来放弃从另一线程而来的调用。

getInputStream()函数通过连接的端口获得输入数据流,即使该端口未连接,该输入数据流也会返回。

不过在该数据流上的操作将抛出异常,直到相关的连接已经建立,当然在聊天实例中,也是我们用来读取晓得数据流。

而getOutputStream ()函数通过连接的端口获得输出数据流,即使该端口未连接,该输出数据流也会返回。

不过在该数据流上的操作将抛出异常,直到相关的连接已经建立,同样用于聊天实例上的发送消息操作。

总结本文主要分析了Ophone平台中蓝牙开发包中的各个类接口的功能和用途,同时也说明了蓝牙编程并不苦难,掌握其通行机制,熟悉其API就能轻松的完成,当然了本文也还没有涉及到具体的实例操作,但是这也是大家必须需要先掌握的基础知识,大家对这些api有一个认识之后,下一篇文章我们就开始动手来做一个蓝牙聊天程序。

相关文档
最新文档