当前位置:   article > 正文

Android 8.1 蓝牙名称客制化_android 蓝牙名称随机生成

android 蓝牙名称随机生成

1.目前的现象:蓝牙名称=设备名称(ro.product.model

2.需求蓝牙名称 = (SN第一位)+型号(ro.product.model)4位+SN后三位//SN序列号是变化的,由写号工具烧写

例如:ro.product.model = TEST

SN:123456789ABCD

那么蓝牙名称 = 1TESTBCD

3.分析:在网上查找默认蓝牙名称都是固定的ro.product.model,应该是有调用的地方。经过网上搜索,确定是在system/bt/btif/src/btif_dm.cc调用

查看代码

  1. #define NUM_TIMEOUT_RETRIES 5
  2. #define PROPERTY_PRODUCT_MODEL "ro.product.model"
  3. #define DEFAULT_LOCAL_NAME_MAX 31
  4. ......
  5. static char* btif_get_default_local_name() {
  6. if (btif_default_local_name[0] == '\0') {
  7. int max_len = sizeof(btif_default_local_name) - 1;
  8. if (BTM_DEF_LOCAL_NAME[0] != '\0') {
  9. strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
  10. } else {
  11. char prop_model[PROPERTY_VALUE_MAX];
  12. osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
  13. strncpy(btif_default_local_name, prop_model, max_len);
  14. }
  15. btif_default_local_name[max_len] = '\0';
  16. }
  17. return btif_default_local_name;
  18. }

在btif_get_default_local_name中,把ro.product.model中的值给btif_default_local_name,那么在这里就可以修改,客制化。

  1. +//add for bt name
  2. +#define PROPERTY_SERIALNO "ro.serialno"
  3. static char* btif_get_default_local_name() {
  4. if (btif_default_local_name[0] == '\0') {
  5. int max_len = sizeof(btif_default_local_name) - 1;
  6. #if 0 //remove
  7. if (BTM_DEF_LOCAL_NAME[0] != '\0') {
  8. strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
  9. } else {
  10. char prop_model[PROPERTY_VALUE_MAX];
  11. osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
  12. strncpy(btif_default_local_name, prop_model, max_len);
  13. }
  14. #endif //remove
  15. //add for bt name
  16. char prop_model[PROPERTY_VALUE_MAX];
  17. char prop_serialno[PROPERTY_VALUE_MAX];
  18. osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
  19. osi_property_get(PROPERTY_SERIALNO, prop_serialno, "");
  20. int len_model = strlen(prop_model);
  21. int len_serialno = strlen(prop_serialno);
  22. strncpy(btif_default_local_name, prop_model, max_len);
  23. if((len_serialno > 4) && (len_model > 3)){
  24. btif_default_local_name[0] = prop_serialno[0];
  25. for(int a = 1;a < 4; a = a + 1){
  26. btif_default_local_name[a] = prop_model[a - 1];
  27. btif_default_local_name[len_model + a] = prop_serialno[len_serialno - 4 + a];
  28. }
  29. }else{
  30. strncpy(btif_default_local_name, prop_model, max_len);
  31. }
  32. btif_default_local_name[max_len] = '\0';
  33. }
  34. return btif_default_local_name;
  35. }

修改编译,没有生效,查看开机log,提示蓝牙权限avc。不允许bluetooth去获取系统属性ro.serialno。

在网上搜索添加权限,由于不是很熟悉,所以基本在所有的bluetooth.te都添加了。

device/mediatek/sepolicy/basic/non_plat/bluetooth.te

system/sepolicy/prebuilts/api/26.0/private/bluetooth.te

system/sepolicy/private/bluetooth.te

+allow bluetooth serialno_prop:file { read open getattr};

编译报错,不允许添加,继续修改添加例外。

在system/sepolicy/prebuilts/api/26.0/public/domain.te

system/sepolicy/public/domain.te

  1. # Do not allow reading device's serial number from system properties except form
  2. # a few whitelisted domains.
  3. neverallow {
  4. domain
  5. -adbd
  6. -dumpstate
  7. -hal_drm
  8. -hal_cas
  9. -init
  10. -mediadrmserver
  11. -recovery
  12. -shell
  13. -system_server
  14. + -bluetooth
  15. } serialno_prop:file r_file_perms;

以上做个记录,如有更好的方式,欢迎交流。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/242357
推荐阅读
相关标签
  

闽ICP备14008679号