理解Android中的PHY_LE_1M与PHY_LE_1M_掩码

理解Android中的PHY_LE_1M与PHY_LE_1M_掩码,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我有一个在BLEV4.1上工作的蓝牙低能设备(smartwatch),我正在为它开发一个Android应用程序 我对BLE PHY有基本了解,但找不到任何与PHY LE 1M和PHY LE 1M掩码相关的内容。Android应用程序中有一个关于和的简介,但不能很好地理解它 你能分享一些与此相关的细节吗?我想在连接方法中使用它 另外,如果未指定,Android中的默认选择是什么?我是否必须指定相同的选择?主要的问题是,正如我目前所发现的那样,BLE v4.1中的设备和手机中常用的BLE是v4.2和

我有一个在BLEV4.1上工作的蓝牙低能设备(smartwatch),我正在为它开发一个Android应用程序

我对BLE PHY有基本了解,但找不到任何与PHY LE 1M和PHY LE 1M掩码相关的内容。Android应用程序中有一个关于和的简介,但不能很好地理解它

你能分享一些与此相关的细节吗?我想在连接方法中使用它


另外,如果未指定,Android中的默认选择是什么?我是否必须指定相同的选择?主要的问题是,正如我目前所发现的那样,BLE v4.1中的设备和手机中常用的BLE是v4.2和v5.0。

最简单的方法可能是将0作为
phy
参数传递(与传递
phy\u选项\u NO\u首选值
相同,其计算结果也是0)

如果要指定显式传输模式,请使用
PHY_LE_1M_MASK
,因为它是BLE 4唯一支持的传输模式。其他的已经用BLE 5引入

\u MASK
结尾的常量似乎用于
connectGatt
中,而不带
\u MASK
的常量则用于
onPhyUpdate


我不知道默认的传输模式/物理层是什么。它可能是LE 1M,也可能是在有关BLE设备的更多信息可用时确定的。

connectGatt
中指定
phy
参数时,应根据文档使用
\u MASK
选项,也就是说,不是非掩码选项。@Emil:您假设编写文档的人完全理解掩码常量的用途。正如我在上面写的,它们一开始就没有多大意义。因此,如果文档中的混乱继续下去,我不会感到惊讶。不管怎样,带和不带
\u MASK
的常量的计算结果是相同的,谷歌不能在不破坏旧软件的情况下更改它们。所以这并不重要,不是吗
PHY\u-LE\u-CODED
为3,而
PHY\u-LE\u-CODED\u-MASK
为4。我不明白为什么这没有意义。如果要使用2M或编码PHY建立连接,请将
PHY
设置为
PHY\LE\u Coded\u MASK | PHY\u 2M\u MASK
。例如,在中使用非掩码版本。尽管我承认,如果只设计一组值,它会更好。我想他们只是照搬了HCI的设计。@Emil:你说得对。我不知道onPhyUpdate的
onPhyUpdate
。他们创建了一个非常复杂的界面。我已经相应地更新了我的答案。