一、蓝牙名称获取
AdapterService.java (packages\apps\bluetooth\src\com\android\bluetooth\btservice)
static final int BT_PROPERTY_BDNAME = 0x01;
static final int BT_PROPERTY_BDADDR = 0x02;
public void onCreate() {
getAdapterPropertyNative(AbstractionLayer.BT_PROPERTY_BDADDR);
getAdapterPropertyNative(AbstractionLayer.BT_PROPERTY_BDNAME);
int ret = sBluetoothInterface->get_adapter_property((bt_property_type_t) type);
bluetoothInterface,
get_adapter_property,
btif_get_adapter_property(type);
btif_transfer_context(execute_storage_request,
BTIF_CORE_STORAGE_ADAPTER_READ, (char*)&req, sizeof(btif_storage_req_t), NULL); // call execute_storage_request
case BTIF_CORE_STORAGE_ADAPTER_READ:
btif_storage_get_adapter_property(&prop);
btif_dm_get_adapter_property(property);
case BT_PROPERTY_BDNAME:
bt_bdname_t *bd_name = (bt_bdname_t*)prop->val;
strcpy((char *)bd_name->name, btif_get_default_local_name()); // 获取名字
HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, &prop); //回到到应用层
下面我们主要看下名字代码的获取:
btif_dm.c (external\bluetooth\bluedroid\btif\src)
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'\0'};
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;
}
二、蓝牙名称显示设置
HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, &prop);
static bt_callbacks_t sBluetoothCallbacks
adapter_properties_callback,
callbackEnv->CallVoidMethod(sJniCallbacksObj, method_adapterPropertyChangedCallback, types, props);
mAdapterProperties.adapterPropertyChangedCallback(types, val);
case AbstractionLayer.BT_PROPERTY_BDNAME:
mName = new String(val);
intent = new Intent(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
intent.putExtra(BluetoothAdapter.EXTRA_LOCAL_NAME, mName);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mService.sendbroadcastAsUser(intent, UserHandle.ALL, mService.BLUetoOTH_PERM);
三、蓝牙名称修改方案
//修改蓝牙默认名称的3种方法
//方法一:
//system/bt/btif/src/btif_dm.c文件中,btif_default_local_name []数组的默认定义为空,如下:
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'\0'};
//修改为需要客制化的名称,例如:Bluetooth
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = "Bluetooth";
//方法二:
//前提条件:
btif_default_local_name [] 数组的默认定义为空
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'\0'};
//修改方法(1):修改/device/generic/common/bluetooth/bdroid_buildcfg.h文件中的蓝牙名称宏定义BTM_DEF_LOCAL_NAME
#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H
#define BTM_DEF_LOCAL_NAME "Android Bluedroid" //修改此处为自己需要的蓝牙默认名称
#endif
//方法三:
//前提条件:
(1) btif_default_local_name [] 数组的默认定义为空
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'\0'};
(2) /system/bt/include/bt_target.h文件中的蓝牙名称宏定义BTM_DEF_LOCAL_NAME为空
#ifndef BTM_DEF_LOCAL_NAME
#define BTM_DEF_LOCAL_NAME "" //修改此处为空
#endif
(3) /device/generic/common/bluetooth/bdroid_buildcfg.h文件中的蓝牙名称宏定义BTM_DEF_LOCAL_NAME为空
#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H
#define BTM_DEF_LOCAL_NAME "" //修改此处为空
#endif
//修改方法:
//满足上面的前置条件,此时默认的蓝牙名称会读取 ro.product.model 属性值作为蓝牙默认名称;
//在文件/system/bt/btif/src/btif_dm.c中已经定义:
#define PROPERTY_PRODUCT_MODEL "ro.product.model"
//在custom.conf文件通过bluetooth.HostName =@ro.product.model@ 来指定默认的蓝牙;
//该property值的设置在:/device/mediatek/k35v1_64_op09_6m/custom.conf //k35v1_64_op09_6m为项目的名称
//bluetooth.HostName = @ro.product.model@
//原理分析:/system/bt/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;
}