蓝牙的状态详解

深入理解蓝牙状态及编程应用 阅读详情

转载于https://blog.youkuaiyun.com/ferrycooper/article/details/51345722

1. 蓝牙设备的发现和同步简介:

蓝牙设备在建立连接以前,通过在固定的一个频段内选择跳频频率或由被查询的设备地址决定,迅速交换握手信息时间和地址,快速取得设备的时间和频率同步。建立连接后,设备双方根据信道跳变序列改变频率,使跳频频率呈现随机特性。

蓝牙系统定义了种工作状态下的跳频序列寻呼、寻呼响应、查询、查询响应 和信道 跳变序列, 不同状态下的跳频序列产生策略不同。

蓝牙定义了32个频点为一个频段, 划分为79个子频段, 工作的频段及跳频顺序取决于所输入的蓝牙主控设备时钟CLK 和主控设备地址的最低28比特有效位, 即BD_ADDR[0…27]或者28比特通用查询接入码(General Inquiry Access Code,GIAC).

1)查询/查询扫描状态:

蓝牙设备通过查询来寻找在其周围邻近的设备,查询设备每隔312.5微秒选择一个新的频率来发送查询,被查询设备每隔1.28s选择一次新的监听频率。查询和被查询设备使用通用查询接入码(GIAC,General Inquiry Acess Code)LAP(Low Address Part),作为查询地址,GIAP LAP为0x9E8B33. 蓝牙标准规定不允许任何蓝牙设备使用和GIAP  LAP一样的地址。产生的32个查询跳变序列(Inquiring  hopping  sequence) 均匀分布在79个频率信道上。

2)寻呼/寻呼扫描状态:

蓝牙设备通过寻呼来呼叫其它的设备加入其所在的微微网,寻呼设备每隔312.5微秒选择一个新的频率来发送寻呼,在寻呼扫描时,被寻呼设备每隔1.28s选择一个新的监听频率。寻呼和被寻呼设备使用被寻呼设备地址(BT_ADDR)的低28个比特,产生的寻呼跳变序列(paging –hopping  sequence)是一个定义明确的周期序列,它的各个频点均匀分布在2.4G的79个频率信道上.

3)连接状态:

在当前状态下, 蓝牙通信设备双方每隔625微秒改变一个频率,使用主设备地址的最低28位有效位, 产生的信道跳变序列(Channel hopping sequence)周期非常长,而且79跳变序列在任何的一小段时间内都是接近均匀分布的。

2. 蓝牙状态转换图:

上图是蓝牙状态转换图,从图中可以看出STANDBY状体是蓝牙设备的默认状态。此模式下设备处于低功耗状态。

Page:这个子状态就是我们通常称为的连接(寻呼),进行连接/激活对应的slave的操作我们就称为page。它是指:发起连接的设备(主设备)知道要连接设备的地址。所以可以直接传呼。(想想传呼机,要知道号码才行)。

Page scan:这个子状态是和page对应的,它就是等待被page的slave所处的状态,换句话说,若想被page到,我们就要处于page scan的状态。

inquiry:这就是我们通常所说的扫描状态,这个状态的设备就是去扫描周围的设备。它是不知道周围有什么设备,要去查询(调查),类似于广播(吆喝)。处于Inquiry Scan的设备可以回应这个查询。再经过必要的协商之后,它们就可以进行连接了。

此处需要说明的是:Inquiry之后,不需要进入Page就可以连接上设备。

inquiry scan:这就是我们通常看到的可被发现的设备。体现在上层就是我们在android系统中点击设备可被周围什么发现,那设备就处于这样的状态。

slave response:这个就是在page的过程中,slave收到了master的page msg,它会回应对应的page response msg,同时自己就进入到了slave response的状态。

master response:master收到slave response的msg后,他就会进入到master response的状态,同时他会发送一个FHS的packet。

inquiry response:就是在inquiry scan的设备在收到inquiry的msg后,就会发送inquiry response的msg,在这之后它就会进入到了inquiry response的状态了。

以上的各种状态可以总结到下面的寻呼过程中:即寻呼过程按照如下步骤进行:

1) 一个设备(源)寻呼另外一个设备(目的),此时处于寻呼状态。(Page state)

2) 目的设备接收到该寻呼,此时处于寻呼扫描状态。(Page Scan state)

3) 目的设备发送对源设备的回复,此时处于子设备响应状态。(Slave Response state)

4) 源设备发送FHS包到目的设备,此时处于主设备响应状态。(Master Response state。)

5) 目的设备发送第二个回复给源设备,此时处于子设备响应状态(Slave Response state。)

6) 目的和源设备切换并采用源信道的参数,此时处于主设备响应状态和子设备响应状态。

从蓝牙耳机到智能手环:详解Android中不同蓝牙Profile的状态管理差异 本文深入解析了Android开发中针对蓝牙耳机、智能手环等不同设备进行蓝牙状态管理的核心差异。重点对比了A2DP音频设备与BLE低功耗设备在连接方式、状态监听和资源管理上的不同策略,并提供了多设备协同下的架构思考与实战代码,帮助开发者构建稳定高效的蓝牙应用。 阅读详情

相关推荐

BES2700源码解析之蓝牙的状态显示和流程

bes2700凭借着超低的功耗,强大的性能,在很多可穿戴产品上有着广泛的应用。团队使用该芯片开发产品的机会,梳理一下源码做个总结。1.蓝牙的配对:这里即可实现双耳的配对,也可以和手机实现配对。1.看源码,找准接口部分,知道代码的流程,接下来就是逐个击破了。

weixin_49735366的博客 690

Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败

RFCOMM拥塞机制 L2CAP拥塞机制

chinaycheng的专栏 3559

蓝牙链路层状态机精解:从待机到连接的状态跃迁与功耗控制

本文将以 "状态跃迁为骨、功耗控制为血",系统解析蓝牙链路层的核心状态机原理,并结合历年真题详解面试重点。无论你是准备求职的应届生,还是需要巩固蓝牙技术的工程师,掌握这些知识不仅能帮你在面试中脱颖而出,更能在实际开发中设计出低功耗高性能的蓝牙产品。

byte轻骑兵的技术小窝 4552

BLE 链路层的状态机

BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分实现的。Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的。Link层使用了状态机,即通过不同的事件的发生来切换BLE的不同状态,这样使整个蓝牙通信的实现显得更加清晰。        链路层定义设备处于状态机中五种状态的一种: (1)就绪态;    上电后,

zhaoshuzhaoshu的专栏 3592

【花雕学编程】Arduino ESP32 SPP 之蓝牙控制多个设备的状态

Arduino ESP32 SPP的蓝牙控制多个设备的状态技术为实现高效、灵活的设备管理提供了一种理想方案,广泛应用于智能家居、工业自动化、环境监测、医疗设备管理以及教育科研等领域。注意,以上案例只是为了拓展思路,仅供参考。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。ESP32通过蓝牙串口协议(SPP)实现对多个设备的无线控制,用户可以通过手机或其他蓝牙设备轻松管理和监控多个设备的状态,方便快捷。

雕爷学编程 869

Origin画图——获取论文图中数据

有时候需要已发表论文的图的数据,这里使用Origin软件取值,并且可以实现对图形再次画图。 Step 1. 打开origin软件,点击工具,图形数字化工具。 Step 2. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 设置参数横轴起始坐标为300-900,纵轴为1.8-2.6. Step 4. 点击第五个手动取点,取出图中数据点。 Step 5. 依次对原图进行取点。点击项目资源查看图。

qq_42278015的博客 5183

深入理解蓝牙BLE之“信道管理”

AFH(advance frequence hopping)跳频算法仅适用于数据信道的选择(除去37,38,39信道的剩余37个信道),在两个设备建立连接的时候,在CONNECT_IND消息中(connect request)会带着hop值和Channel Map(一共37个bit,为1表示对应的channel可用,为0表示对应的channel不可用)。不一样的是跳频阶跃的值,跳频算法1的跳频阶跃值是固定的,也即是hop是一个固定的值,跳频算法2的跳频阶跃是通过算法计算出来的,也就是hop不是一个固定值。

xqhrs232的专栏 4275

40-基于STM32与LD3320的智能语音调光台灯开发全攻略(代码+硬件+调试心得)

本文详细介绍了基于STM32与LD3320的智能语音调光台灯开发全攻略,包括硬件设计、软件实现和调试心得。项目利用STM32单片机控制LD3320语音识别模块,实现语音控制开关和PWM调光功能,适合非接触式操作场景。文章还分享了硬件选型、PWM调光算法优化及常见问题解决方案,为开发者提供完整参考。

weixin_29163797的博客 325

蓝牙基础(四):蓝牙状态、角色、地址与网络结构

在蓝牙网状网络(Mesh)中还有中继节点(Relay)、朋友节点(Friend)、低功耗节点(Low Power Node)等特殊角色。:一个主设备(Master)最多连接7个活跃从设备(Slave),采用TDMA时分复用通信。:由IEEE分配,全球唯一,格式为24位OUI(厂商代码)+24位设备标识。:设备自行生成,分为静态地址(固定不变)和私有地址(定期变化保护隐私)。:设备未连接任何网络,处于低功耗模式,等待被激活或发起连接。:设备监听广播信道,寻找可连接的设备或接收广播数据。

2508_94036863的博客 470

机械臂控制的基础知识

在现代工业中,机械臂的自动化控制已经成为智能制造的重要一环。控制机械臂涉及多个学科,包括机械设计、运动学、控制理论和编程等。本文将从以下几个方面介绍机械臂控制的核心知识点:机械臂的构成、运动学分析、动力学建模、控制方法及编程实现。

qq_45728381的博客 5470

AI 代码生成工具的质量评估体系

基础需求层包括响应速度(Response Time)和界面友好性(UI Friendliness),期望需求层涵盖智能提示(Smart Suggestions)和个性化配置(Personalization),兴奋需求层则涉及多模态交互(Multimodal Interaction)和代码进化(Code Evolution)。在金融领域,代码审计合规性(Compliance Audit)权重应提升至40%,而在Web开发中,API兼容性(API Compatibility)的权重需达到35%。

2503_92418637的博客 3373

监听蓝牙连接的状态

之前写的是监听蓝牙是否打开。这篇文章简单的介绍蓝牙的连接状态监听。忘记是哪位博主写的了。本人简单的整理下。代码其实就一个工具类而已: package com.tools; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Cont...

湖言的博客 4069

从零手搓大模型(一)文本如何变成 LLM 的输入

本文介绍了从原始文本到LLM输入向量的完整处理流程。主要内容包括: 文本预处理:通过正则表达式将原始文本分割成token列表,处理标点和空格。 词表构建:创建token到ID的映射字典(vocabulary),这是文本数字化的关键步骤。 简单tokenizer实现:封装了编码(encode)和解码(decode)功能,完成文本与token ID的相互转换。 处理流程:原始文本 → 分词 → token ID → 嵌入表示 → 最终输入向量。 数据形状变化:从字符串逐步转换为(batch_size, cont

echo的博客 1001

Unity Android 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理

Unity Android 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 目录 Unity Android 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 Android 端: Unity 端 六、关键代码 Android 端 ...

仙魁XAN 7240

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理

Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 目录 Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、关键代码 一、简单介绍 Android 开发中的...

仙魁XAN 5983

27、超声成像技术与原理全面解析

本博客全面解析了超声成像技术与原理,涵盖声学材料特性、超声成像系统的基本概念与组成、关键技术如多普勒和聚焦技术、超声换能器的设计与原理、图像处理方法、系统校准与质量控制,以及超声成像的应用领域和发展趋势。旨在为医学诊断、工业检测和海洋声学等领域的研究人员和工程师提供深入的技术参考和指导。

z2a3b4c5d的博客 494

android怎么来判断蓝牙开、关的状态

Android 蓝牙编程的基本步骤:  获取蓝牙适配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();  如果BluetoothAdapter 为null,说明android手机没有蓝牙模块。 判断蓝牙模块是否开启,blueadapter.isEnabled() true表示已经开启,

丿灬安之若死 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

杰里之获取蓝牙主机和从机的状态

主机获取蓝牙状态 get_bt_connect_status 从机获取状态用这个函数 get_tws_connect_status

u013820168的博客 513

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Cleer Arc5蓝牙耳机多点连接的状态机设计

本文深入解析Cleer Arc5蓝牙耳机的多点连接状态机设计,通过层次化有限状态机实现跨设备无缝切换。系统基于Bluetooth 5.3与FreeRTOS,结合事件驱动机制,有效管理音频焦点、连接优先级与功耗优化,提升用户体验。

weixin_36300623的博客 823

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

adb命令查看蓝牙开关的状态

【代码】adb命令查看蓝牙开关的状态。

效率工具,软件测试,实用干货,资源分享,这里全是黑科技。 693

蓝牙设备需要按键操作才能进入可被查找的状态

蓝牙技术

lvpf 172

android开发蓝牙是否可见开关_android怎么来判断蓝牙开、关的状态?求代码

展开全部android中可以通过以下代码监听蓝牙的开关状态:BluetoothService.java文件import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.UUID;import com.dvb.detector.constant.Constant;i...

weixin_42421710的博客 849

杰理之影响系统功耗的另一个原因就是蓝牙状态的切换。蓝牙的状态切换包括了经典蓝牙和BLE【篇】

经典蓝牙在开启可发现(inquiry_scan)、可连接(page_scan)、回连(page)时功耗会比较高。因此,我们应该在保证不影响经典蓝牙功能的前提下尽量减少这些状态的出现。我们SDK上面配置了一个接口函数,主要是用于调整蓝牙空闲状态的时间。其中,1600为时间参数,时间实际为1600*0.625ms。因为经典蓝牙处于未连接状态时,一般都在工作状态(可发现(inquiry_scan)、可连接(page_scan)、回连(page))和空闲状态直接切换,因此加大空闲时间,就会会加大每次切花到工作状态的

u013820168的博客 1064
上一篇: 蓝牙连接的过程
下一篇: 解决 source insight 代码无法关联显示的问题
小白study
博客等级 码龄12年 658粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值