Android 6.0 蓝牙 和低功耗蓝牙

2017-06-07 17:01:21 +08:00
 stdying
蓝牙有标准蓝牙 和低功耗蓝牙;
这两个在 android 中是不是都同时支持,在哪里可以看到,
在 java 层和 JNI 层是不是都有相关代码
5350 次点击
所在节点    Android
12 条回复
GaoMjun
2017-06-07 17:25:34 +08:00
mxi1
2017-06-07 17:26:11 +08:00
之所以有标准蓝牙和低功耗蓝牙的区别,是因为它们的物理层实现不一样。Android 从 4.4 就支持低功耗蓝牙了,在 Android Frameworks 和 Natvie 层都能看到对应的代码,协议栈在 system/bt 目录下面; Java 和 JNI 的代码,你可以按照 Android 开发文档里面提到的 Class 名称去 AOSP 代码里面找。
uleh
2017-06-07 17:44:33 +08:00
蓝牙的物理层面是一样的,最大功率由硬件决定。
但是蓝牙 4.0 支持不同的 Profile,对发射功率、频率、数据包等进行调节。低功耗蓝牙就是特别注重功耗的一个 Profile,但是连接距离、发射频率、数据传输带宽等都有很大限制。
uleh
2017-06-07 17:46:41 +08:00
回到 lz 问题,Android 这一块源码我还没有仔细读过,不过蓝牙在驱动层应该是一样的,应该是在 HAL 或者 Framework 层向上做了区别。你可以重点看下 Connectivity 模块,我印象里 LE 的封装应该是在这块或者更底层一点。
stdying
2017-06-08 10:20:24 +08:00
@GaoMjun 这个看过,没找到区别在哪,太愚钝了。
@mxi1 java 层看到一些 gatt 相关的,在 JNI 里面就分不清了
@uleh 你的意思我大概明白了一点,还需要了解一下协议; HAL 层的话可能还需要一些时间好好区分
mxi1
2017-06-08 10:46:40 +08:00
@stdying HAL 层的头文件在 hardware/libhardware/include/hardware ( https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware)里面。你可以在 JNI 里面搜一下 HAL 层涉及到的函数,就很容易对应上了
stdying
2017-06-08 10:51:35 +08:00
@mxi1 源代码已经下载下来了
activity_recognition.h bt_gatt_types.h camera3.h hdmi_cec.h memtrack.h
audio_alsaops.h bt_hf_client.h camera_common.h hw_auth_token.h nfc.h
audio_effect.h bt_hf.h camera.h hwcomposer_defs.h nfc_tag.h
audio.h bt_hh.h consumerir.h hwcomposer.h power.h
audio_policy.h bt_hl.h fb.h input.h qemud.h
bluetooth.h bt_mce.h fingerprint.h keymaster0.h qemu_pipe.h
bt_av.h bt_pan.h fused_location.h keymaster1.h radio.h
bt_common_types.h bt_rc.h gatekeeper.h keymaster_common.h sensors.h
bt_gatt_client.h bt_sdp.h gps.h keymaster_defs.h sound_trigger.h
bt_gatt.h bt_sock.h gralloc.h lights.h tv_input.h
bt_gatt_server.h camera2.h hardware.h local_time_hal.h vibrator.h

在函数名称上就可以区分出来?
目前正在看 JNI 部分
mxi1
2017-06-08 10:56:14 +08:00
@stdying 比如,你读一下 bt_gatt_client.h 里面的函数定义,然后在 JNI 里面可以搜索的到,就可以对应到 Java 代码了。我理解 JNI 起的一个作用就是把 C 定义的函数给映射到了 Java 代码里面。
mxi1
2017-06-08 10:57:29 +08:00
@uleh BLE 和 BT 的物理层是不一样的,但是复用了 BT 上面的协议层。
stdying
2017-06-08 14:34:39 +08:00
@mxi1 和 gatt 相关的都可以认为是和 BLE 有关
@mxi1 还是需要看看协议,现在主要是在看代码,协议只是简单看过,需要认真看看协议
mxi1
2017-06-08 17:18:05 +08:00
@stdying 协议的话,可以去 BT SIG 官网下载对应的说明文档,详细到令人发指的程度
stdying
2017-06-08 20:27:21 +08:00
@mxi1 主要是希望有人指点一下,这样更好些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/366710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX