蓝牙WiFi
文章平均质量分 89
对蓝牙WiFi基础介绍、常用协议及功能的源码进行分析,主要是在车载Framework层的角度去看功能调用流程。源码部分是以Android 12为主。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
c小旭
Android Framework车载智能座舱开发工程师
展开
-
Android Wifi——Wifi锁(十九)
有的时候我们需要 APP 在手机后台运行,但是会遇到手机一旦息屏或者断网,APP 无法正常运行的情况,这是因为手机屏幕关闭之后,并且其他的应用程序没有在使用 Wifi 的时候,系统大概在两分钟之后,会关闭 Wifi,使得 Wifi 处于睡眠状态。而 Wifi 锁 就是 Android 锁屏后 Wifi 不活跃的解决方案。原创 2023-05-25 18:03:19 · 1037 阅读 · 0 评论 -
Android Wifi——室内网络(十八)
WiFi RTT 功能是 Android P 新引入的一个功能,主要用于在室内定位。WiFi RTT 是全新的功能,借助 AP 热点或 WiFi,利用 RTT 原理完成测距,通过三个以上的测距点就能够准确地定位到设备所在位置,结果通常可以精确到 1 至 2 米。凭借这种精准度,可以用来开发基于精确位置的服务,例如室内导航、无歧义语音控制(例如,“打开这盏灯”)以及基于位置的信息(例如,“此产品是否有特别优惠?”)。原创 2023-05-25 13:07:27 · 1153 阅读 · 2 评论 -
Android Wifi——感知网络连接(十七)
接着上一篇文章,WifiAwareManager 管理器中还有一个最重要的接口,就是感知网络连接的接口 attach()。这一篇我们主要分析连接接口的源码。原创 2023-05-04 11:06:59 · 294 阅读 · 0 评论 -
Android Wifi——感知网络管理器(十六)
WifiAwareManager 作为感知网络的管理器,封装了供 APP 调用的常用接口,了解接口功能,就能快速理解感知网络的整体功能。原创 2023-04-10 09:01:07 · 200 阅读 · 0 评论 -
Android Wifi——感知网络(十五)
Wi-Fi 感知网络的工作原理是与相邻设备形成群集,或者如果设备是某个区域中的第一个设备,则创建新群集,并由 Wi-Fi 感知系统服务管理。Wi-Fi 的感知技术,让 Wi-Fi 可以发现周围的“同类”,集自由组网,数据传输和测距于一身的 Wi-Fi Aware 技术。发现其他设备:此 API 具有查找其他附近设备的机制。此过程会在一台设备发布一项或多项可发现服务时启动。然后,当设备订阅一项或多项服务并进入发布者的 WLAN 范围时,订阅者会收到一条告知已发现匹配发布者的通知。原创 2023-04-06 14:14:31 · 583 阅读 · 0 评论 -
Android Wifi——WLAN源码(十四)
上一篇文章主要介绍了 WLAN 直连的 API 及应用开发流程,这一篇主要来看一看源码的实现。原创 2023-04-06 14:14:16 · 896 阅读 · 0 评论 -
Android Wifi——WLAN直连(十三)
WLAN 直连 (对等连接或P2P) 技术,通过 WLAN 进行直接互联。使用这些 API,您可以实现支持 WLAN P2P 的设备间相互发现和连接,从而获得比蓝牙连接更远距离的高速连接通信效果。对于多人游戏或照片共享等需要在用户之间共享数据的应用而言,这一技术非常有用。原创 2023-04-06 14:14:01 · 1086 阅读 · 0 评论 -
Android Wifi——评分规则(十二)
上一章节我们最后拿到了 WiFi 的评分以及获取评分的整个流程,这一章节我们看一下他的评分规则是怎样的。当前安卓 WiFi 框架中已实现的评分器有 CompatibilityScorer、ScoreCardBasedScorer、BubbleFunScorer、ThroughputScorer 这四种,分别表示这不同的评分策略,但是四种评分器都是基于热点信号和热点频率的前提下进行的有策略的倾斜评分。首先看一下最后获取评分的方法。原创 2023-04-06 13:49:16 · 837 阅读 · 0 评论 -
Android Wifi——网络评分(十一)
在安卓 WiFi 框架中,有一套机制实现了对设备周围的热点在一定规则下进行打分,然后根据分数高低决定是否需要连接。这就是网络评分机制。在前面的文章中,我们最后回调走到了 scanListener 的 onResults() 方法,而对网络的评分,肯定也是在扫描到网络后才会对网络进行评分。原创 2023-04-06 13:47:36 · 891 阅读 · 0 评论 -
Android Wifi——热点分享(十)
Android上的WiFi SoftAp功能是用户常用的功能之一,它能让我们分享手机的网络给其他设备使用。原创 2023-04-06 10:29:04 · 826 阅读 · 0 评论 -
Android Wifi——网络配置(九)
前面分析了网路连接的流程,对于连接新的网络需要添加网络配置信息,然后拿到 networkId 再进行网络连接。原创 2023-04-04 15:25:05 · 1112 阅读 · 0 评论 -
Android Wifi——WiFi连接(八)
源码位置:/packages/modules/Wifi/service/java/com/android/server/wifi/WifiBlocklistMonitor.java。源码位置:/packages/modules/Wifi/service/java/com/android/server/wifi/WifiServiceImpl.java。源码位置:/packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java。原创 2023-03-17 13:21:56 · 1179 阅读 · 0 评论 -
Android Wifi——扫描监听(七)
从前面的章节可以了解到,扫描服务是一个比较主要服务。这里来分析一下 WiFi 如何监听扫描结果。原创 2023-03-16 17:47:45 · 303 阅读 · 0 评论 -
Android Wifi——扫描结果(六)
WiFi 开始扫描后,当扫描结果可操作时会收到 SCAN_RESULTS_AVAILABLE_ACTION 广播,这时我们通过 WifiManager.getScanResults() 获取 WiFi 列表。原创 2023-03-15 17:45:39 · 813 阅读 · 0 评论 -
Android Wifi——热点扫描(五)
在开启 WiFi 后,一般会通过监听 CONFIGURED_NETWORKS_CHANGED_ACTION 网络变化广播,在 WiFi 状态为 WifiManager.WIFI_STATE_ENABLED 时,开始扫描。原创 2023-03-10 17:52:30 · 619 阅读 · 0 评论 -
Android Wifi——开启WiFi(四)
在中我们分析了 WiFi 连接流程的部分内容,这里我们接着上面的内容继续分析 startPrimaryOrScanOnlyClientModeManager() 方法,看一看WiFi连接的后续调用。原创 2023-03-09 17:04:08 · 787 阅读 · 0 评论 -
Android Wifi——开发基础(三)
在 Android 中对 WiFi 操作,android 本身提供了一些有用的包,在 android.net.wifi 包下面。主要包括以下几个类和接口: 主要用来描述已经检测出的接入点,包括接入点地址、名称、身份认证、频率、信号强度等信息。 Wifi 网络的配置,包括安全设置等,在我们连通一个 wifi 接入点的时候,需要获取到的一些信息,主要包括四个属性: wifi 无线连接的描述,包括(接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC 地址、网络原创 2023-03-07 15:41:32 · 811 阅读 · 2 评论 -
Android Wifi——主要服务(二)
源码路径:/packages/modules/Wifi/service/java/com/android/server/wifi/WifiService.java用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。WifiService 作为Framework 中 Wi-Fi 功能的总入口,WifiService 是 Framework 中负责 Wi-Fi 功能的核心服务,它主要借助 WPAS 来管理和控制 Android 平台中的 Wi-Fi 功能。......原创 2023-03-03 17:42:48 · 237 阅读 · 0 评论 -
Android Wifi——概述(一)
进程接口类代码路径编译后文件进程进程Wifi Cond进程wificondwificond守护进程Hostapd守护进程HostApdHalhostapd描述:Android 本身提供了一些有用的包WifiManager 类是暴露给应用层使用的一个管理类,用来管理我们的 wifi 连接,这里已经定义好了一些类,可以供我们使用,获取 WiFi 网卡状态。原创 2023-03-03 12:15:54 · 834 阅读 · 4 评论 -
Android 蓝牙——HCI log 分析(十九)
打开客户端导入文件选择 log 类型为 BtSnoop Files还有一种方式是将btsnoop_hci.log的后缀修改为btsnoop_hci.cfa,就可以直接用Capture File Viewer打开。选择 Frame DisplayFrame Display主界面。原创 2023-02-28 16:36:42 · 2199 阅读 · 2 评论 -
Android 蓝牙——自动重连机制(十八)
在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。本篇文章我们就来聊一聊安卓系统中蓝牙的自动重连机制。由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:监听蓝牙的状态变化->获取关闭蓝牙前连接的设备信息->自动连接。原创 2023-02-09 10:26:33 · 2534 阅读 · 0 评论 -
Android 蓝牙——Avrcp协议获取歌曲信息(十七)
以上是对获取歌曲信息的流程进行简单分析,至于APP部分如何获取歌曲信息这里就不做研究,有兴趣的可以参考。原创 2023-01-31 18:37:08 · 1152 阅读 · 0 评论 -
Android BLE蓝牙——服务端源码(十六)
本文需要结合这篇文章一起看,因为本文是根据服务端实现的流程进行对应的源码进行分析的。原创 2023-01-31 11:14:43 · 752 阅读 · 0 评论 -
Android BLE蓝牙——客户端源码(十五)
之前的两篇文章都是参考大佬的博客完成了应用层客户端与服务端的开发,下面我们按照之前的流程对源码进行分析。原创 2023-01-30 11:16:10 · 793 阅读 · 0 评论 -
Android BLE蓝牙——服务端实现(十四)
如下(这里只是个举例,可以根据项目需求扩展)消息号(1个字节)功能(1个字节)子功能(1个字节)数据长度(2个字节)数据内容(N个字节)CRC校验(1个字节)01010100002D。原创 2023-01-28 17:34:02 · 1154 阅读 · 0 评论 -
Android BLE蓝牙——客户端实现(十三)
表示蓝牙GATT服务,包含多个Characteristic(属性特征值),含有唯一的UUID作为标识。getDevice:获取服务关联的设备setDevice:设置服务关联的设备addService:添加包含的服务addCharacteristic:添加特性getCharacteristic:通过 UUID 和 instanceId 获取特征getInstanceId:获取 instanceIdsetInstanceId:设置 instanceIdgetHandles:获取 Handles。原创 2023-01-28 16:47:30 · 557 阅读 · 0 评论 -
Android 蓝牙——Avrcp协议(十二)
v1.0:基本的远程控制命令,如播放、暂停、切歌v1.3:新增获取音乐当前的播放状态以及播放音乐的歌曲信息(歌曲总时长、当前播放位置、歌曲名、专辑名、歌手)v1.4:新增浏览功能,支持绝对音量调节v1.5:相关协议已通过的更改以纠正各种错误v1.6:新增两个特性:1)项目的数量:用于控制器的接口,请求和接收文件夹中的项数,而无需下载列表2)封面艺术:支持通过基于OBEX协议上的BIP(Basic Imaging Profile)协议将图像传输到媒体项目。原创 2023-01-28 11:05:36 · 7635 阅读 · 2 评论 -
Android 蓝牙——A2DP协议(十一)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-28 09:19:35 · 1679 阅读 · 0 评论 -
Android 蓝牙——PBAP协议(十)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 11:03:50 · 2438 阅读 · 0 评论 -
Android 蓝牙——HFP协议(九)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 10:59:21 · 1600 阅读 · 0 评论 -
Android 蓝牙——MAP协议(八)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 10:47:33 · 3301 阅读 · 0 评论 -
Android 蓝牙——协议配置(七)
android overlay 机制允许在不修改 packages 中 apk 的情况下,来自定义 framework 和package 中的资源文件,实现资源的定制。来达到显示不同的 ui 的目的(例如MIUI)。原理是在通过AAPT打包成APK时,通过-S命令多增加了一个资源目录(overlay目录),我们平时打包APK只是通过AAPT -S指定了一个资源目录,而Overlay又额外增加了一个资源目录。AAPT -S命令可以指定多个资源目录,overlay的资源将替换原res中的重名文件。原创 2023-01-19 10:04:51 · 2769 阅读 · 0 评论 -
Android 蓝牙——蓝牙连接(六)
还有说异常就重连,三次就会成功。源码位置:/packages/apps/Bluetooth/jni/com_android_bluetooth_btservice_AdapterService.cpp。建立连接时,如果没有建立过配对关系,那么连接时会先去建立配对关系,然后再执行连接;源码位置:/frameworks/base/core/java/android/bluetooth/BluetoothSocket.java。建立连接时,如果没有建立过配对关系,就会跳过配对过程,直接执行连接。原创 2023-01-18 15:59:07 · 1777 阅读 · 0 评论 -
Android 蓝牙——蓝牙配对(五)
配对是用来与连接设备创建加密连接的过程。1、蓝牙配对成功后才进行各种协议(A2dpSink、HFPClient、PbapClient等)的连接。2、配对过程中的ssp_request,即加密请求,需要用户同意,也可以由 Framework 侧自动回复同意,不弹出用户提示框。3、配对成功需要两个条件:a.协议栈 bondStateChangeCallback 回调通知 BOND_BONDED。b.devicePropertyChangedCallback 回调通知更新配对设备的UUIDs。原创 2023-01-18 14:45:26 · 2437 阅读 · 0 评论 -
Android 蓝牙——设备查找(四)
BTU TASK收到消息后,调用 bta_dm_main.c 的(用于DM的状态机事件处理函数) bta_dm_search_sm_execute() 执行状态切换和 inquiry 流程。源码位置:packages/apps/Bluetooth/jni/com_android_bluetooth_btservice_AdapterService.cpp。源码位置:/system/bt/bta/dm/bta_dm_api.cc。源码位置:/system/bt/btif/src/btif_dm.cc。原创 2023-01-18 10:49:10 · 1177 阅读 · 0 评论 -
Android 蓝牙——基础开发(三)
蓝牙开发这部分主要以 APP 端调用功能接口为开始,到 Framework 端的调用流程,最后到调用状态机结束,不涉及蓝牙协议栈的开发分析。原创 2023-01-17 17:40:55 · 1063 阅读 · 0 评论 -
Android 蓝牙——系统服务(二)
BluetoothManagerService 是 Android 操作系统中的一个系统服务,它负责管理设备的蓝牙功能。该服务提供了一组API,供应用程序与蓝牙功能进行交互,包括打开和关闭蓝牙、搜索和配对其他设备、建立蓝牙连接等操作。BluetoothManagerService 还负责管理蓝牙硬件的驱动程序和蓝牙协议栈的运行。通过这个服务,应用程序可以方便地与蓝牙设备进行通信和交互。原创 2023-01-17 17:26:05 · 1079 阅读 · 0 评论 -
Android 蓝牙——概述(一)
Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。原创 2023-01-17 16:04:25 · 2079 阅读 · 0 评论