android下,如果厂家没有对蓝牙默认名称做修改,那蓝牙的默认名称为“Android Bluedroid”。蓝牙首次打开时就会从bluedroid获取蓝牙名称,并保存到文件,后面就是使用这个名称了,除非用户在设置里手动修改蓝牙名称。
Bluedroid中蓝牙获取名称代码在:
android\external\bluetooth\bluedroid\btif\src\btif_dm.c
static char* btif_get_default_local_name() {
if (btif_default_local_name[0] == '\0')
{
int max_len = sizeof(btif_default_local_name) - 1;
if (BTM_DEF_LOCAL_NAME[0] != '\0')
{
strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
}
else
{
char prop_model[PROPERTY_VALUE_MAX];
property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
strncpy(btif_default_local_name, prop_model, max_len);
}
btif_default_local_name[max_len] = '\0';
}
return btif_default_local_name;
}
Bluedroid中btif_default_local_name是没初始化的,就会检测BTM_DEF_LOCAL_NAME是否定义了,若定义了,就会使用BTM_DEF_LOCAL_NAME定义的名称。如果BTM_DEF_LOCAL_NAME没定义,就会使用PROPERTY_PRODUCT_MODEL(ro.product.model)属性的定义。
BTM_DEF_LOCAL_NAME在bluedroid中定义如下:
android\external\bluetooth\bluedroid\include\bt_target.h
#ifndef BTM_DEF_LOCAL_NAME
#define BTM_DEF_LOCAL_NAME ""
#endif
但在这之前,就有一个地方定义了BTM_DEF_LOCAL_NAME,所以该处定义不起作用,BTM_DEF_LOCAL_NAME定义在:
Android\device\generic\common\bluetooth\bdroid_buildcfg.h
#define BTM_DEF_LOCAL_NAME "Android Bluedroid"
这也就是为什么android默认的蓝牙名称为”Android Bluedroid”。