服務(wù)器租用網(wǎng)站模板寧波seo網(wǎng)絡(luò)推廣軟件系統(tǒng)
Android14 藍(lán)牙設(shè)備類型設(shè)置修改設(shè)置
文章目錄
- Android14 藍(lán)牙設(shè)備類型設(shè)置修改設(shè)置
- 一、前言
- 二、修改藍(lán)牙設(shè)備類型
- 1、藍(lán)牙設(shè)備類型和對(duì)應(yīng)的屬性
- 2、Debug設(shè)備設(shè)置和獲取藍(lán)牙設(shè)備類型
- 3、系統(tǒng)源碼中設(shè)置藍(lán)牙設(shè)備類型
- 4、Java代碼中設(shè)置藍(lán)牙prop屬性可行嗎?
- 三、其他
- 1、Android13藍(lán)牙prop協(xié)議屬性相關(guān)內(nèi)容:
- 2、藍(lán)牙設(shè)備屬性未分析到的地方
- (1)源碼中讀取藍(lán)牙設(shè)備屬性的處理
- (2)其他設(shè)備掃描到的藍(lán)牙屬性值和系統(tǒng)定義的設(shè)備屬性值的關(guān)聯(lián)過(guò)程
- 3、Android 藍(lán)牙設(shè)備類型判斷代碼介紹
- 4、Android14 大屏開(kāi)機(jī)后藍(lán)牙可搜索但無(wú)法連接分析解決
一、前言
Android 藍(lán)牙設(shè)備類型有啥用?就是顯示藍(lán)牙類型作用。
Android設(shè)備打開(kāi)藍(lán)牙后,其他手機(jī)可以搜到該藍(lán)牙設(shè)備,一般顯示為電話或者平板。
但是很多源碼編譯出來(lái)的系統(tǒng)默認(rèn)是顯示耳機(jī)類型,那么如何修改呢?
如果是Android11 或者更舊的版本可以參考:
https://blog.csdn.net/xiao5678yun/article/details/80738147
https://blog.csdn.net/zmk0810612124/article/details/82222415
https://blog.csdn.net/weixin_39008937/article/details/134850641
大致修改:
XXX.h //不同的方案具體目錄不同,一般在device或者system
#define BTA_DM_COD {0x5A, 0x02, 0x0C} // 手機(jī)端搜索到的藍(lán)牙顯示手機(jī)圖標(biāo)#define BTA_DM_COD {0x5A, 0x04, 0x06} // 手機(jī)端搜索到的藍(lán)牙顯示帶耳麥的耳機(jī)圖標(biāo)#define BTA_DM_COD {0x5A, 0x04, 0x18} // 手機(jī)端搜索到的藍(lán)牙顯示不帶耳麥的耳機(jī)圖標(biāo)
Android14 版本也能搜到到定義 BTA_DM_COD 的地方,但是修改了沒(méi)有作用。
那么Android14 修改藍(lán)牙設(shè)備類型,需要如何修改呢?
其實(shí)Android13開(kāi)始,藍(lán)牙的協(xié)議就設(shè)置成prop屬性定義了,所以藍(lán)牙的設(shè)備類型也是一個(gè)prop屬性了。
驗(yàn)證通過(guò)prop屬性修改藍(lán)牙類型是OK的,并且藍(lán)牙類型的prop屬性可以串口修改,關(guān)開(kāi)一次藍(lán)牙就能生效。
目前關(guān)于Android13以上的藍(lán)牙設(shè)備類型修改的文章暫時(shí)還沒(méi)有,有興趣的可以查看或者收藏。
二、修改藍(lán)牙設(shè)備類型
1、藍(lán)牙設(shè)備類型和對(duì)應(yīng)的屬性
bluetooth.device.class_of_device=26,1,10 //平板/電腦
bluetooth.device.class_of_device=40,4,60 //耳機(jī)/音箱
bluetooth.device.class_of_device=90,2,12 /電話/手機(jī)類型
bluetooth.device.class_of_device=1,2,3 //隨便設(shè)置一個(gè),顯示為電話類型
2、Debug設(shè)備設(shè)置和獲取藍(lán)牙設(shè)備類型
//設(shè)置藍(lán)牙設(shè)備類型,平板
setprop bluetooth.device.class_of_device=26,1,10//查看藍(lán)牙設(shè)備類型
getprop bluetooth.device.class_of_device
3、系統(tǒng)源碼中設(shè)置藍(lán)牙設(shè)備類型
既然是prop屬性,那么寫(xiě)在某個(gè)mk里面就可以了吧,
但是不同的芯片系統(tǒng)方案,寫(xiě)法可能會(huì)有不同,
比如9679 方案,有devices目錄下有個(gè)bluetooth.prop文件專門用來(lái)定義藍(lán)牙相關(guān)prop屬性的。
device/mediatek/mt5879/configs/bluetooth.prop
bluetooth.device.class_of_device=40,4,60 //默認(rèn)居然是耳機(jī)!
bluetooth.device.class_of_device=26,1,10
bluetooth.profile.a2dp.source.enabled?=true
bluetooth.profile.avrcp.target.enabled?=true
bluetooth.profile.bas.client.enabled?=true
...
比如3588方案,并沒(méi)有個(gè) bluetooth.prop文件,都是用mk文件定義的prop屬性。
device/rockchip/common/modules/bluetooth.mk
# Set supported Bluetooth profiles to enabled
PRODUCT_PRODUCT_PROPERTIES += \ //普通屬性也可以這樣設(shè)置默認(rèn)值bluetooth.device.class_of_device?=26,1,10 \ //這個(gè)屬性原本沒(méi)有,是我加的!bluetooth.profile.asha.central.enabled?=true \bluetooth.profile.a2dp.source.enabled?=true \bluetooth.profile.avrcp.target.enabled?=true \bluetooth.profile.bas.client.enabled?=true \bluetooth.profile.gatt.enabled?=true \bluetooth.profile.hfp.ag.enabled?=true \bluetooth.profile.hid.device.enabled?=true \bluetooth.profile.hid.host.enabled?=true \bluetooth.profile.map.server.enabled?=true \bluetooth.profile.opp.enabled?=true \bluetooth.profile.pan.nap.enabled?=true \bluetooth.profile.pan.panu.enabled?=true \bluetooth.profile.pbap.server.enabled?=true \bluetooth.profile.sap.server.enabled?=true
...
大致的修改就上面兩種情況,
一種是修改在某個(gè)prop文件,另外一種修改在mk文件。
但是也排除有其他文件定義的情況,可以在關(guān)鍵目錄先搜索看看:
grep -nr bluetooth.device.class_of_device
grep -nr bluetooth.profile.a2dp.source.enabled
class_of_device 屬性設(shè)備,不一定會(huì)定義,但是 a2dp.source 源碼中肯定會(huì)定義的。
4、Java代碼中設(shè)置藍(lán)牙prop屬性可行嗎?
Java設(shè)置prop代碼
SystemProperties.set("bluetooth.device.class_of_device", "40,4,60");
最好不要這樣做。
因?yàn)榈挠性?679和3588 方案的開(kāi)機(jī)廣播和系統(tǒng)服務(wù)啟動(dòng)后設(shè)置該屬性,查看打印是有報(bào)錯(cuò)提示的。
并且再次重啟有概率系統(tǒng)無(wú)法起來(lái),進(jìn)入Recovery模式。
所以這個(gè)估計(jì)是不可行的。
就像Android13 之后的代碼,無(wú)法執(zhí)行需要系統(tǒng)權(quán)限的adb shell命令那樣。
估計(jì)和系統(tǒng)權(quán)限限制有關(guān)。
三、其他
1、Android13藍(lán)牙prop協(xié)議屬性相關(guān)內(nèi)容:
如果是做藍(lán)牙相關(guān)研究,藍(lán)牙prop屬性是必須要掌握的;
這個(gè)是Android13 新出的,很多藍(lán)牙之前設(shè)置的屬性就不管用了。
https://blog.csdn.net/wenzhi20102321/article/details/139703045
2、藍(lán)牙設(shè)備屬性未分析到的地方
(1)源碼中讀取藍(lán)牙設(shè)備屬性的處理
系統(tǒng)代碼中哪里處理屬性 bluetooth.device.class_of_device ?
在源碼中大致有兩個(gè)地方有讀取這個(gè)屬性:
package\modules\Bluetooth\system\btif\src\btif_dm.cc
package\modules\Bluetooth\system\gd\sysprops\sysprops_module.cc
但是未看到讀取屬性后的具體判斷和處理!
也可能是c代碼不熟悉,看不懂具體處理過(guò)程。
(2)其他設(shè)備掃描到的藍(lán)牙屬性值和系統(tǒng)定義的設(shè)備屬性值的關(guān)聯(lián)過(guò)程
Java 代碼中耳機(jī)類型的值的定義:
//藍(lán)牙耳機(jī)
action = android.bluetooth.device.action.BOND_STATE_CHANGED//其他廣播也打印,這邊不一一寫(xiě)
device = 0D:3F:91:E2:FF:D3
getAlias = Y-12
type = 1
getDeviceClassType = 1028 // -->0x404
getMajorDeviceClassType = 1024 // -->0x400
Java上定義的值在不同版本上目前是沒(méi)有修改的,
這個(gè)和上面定義的prop值或者更早的BTA_DM_COD 的定義都是不同的,
難道和Android按鈕鍵值一樣,有一套映射文件和流程?
有興趣的可以自己研究看看。
3、Android 藍(lán)牙設(shè)備類型判斷代碼介紹
使用Java代碼如何獲取和區(qū)分藍(lán)牙設(shè)備類型
https://blog.csdn.net/wenzhi20102321/article/details/133777224
4、Android14 大屏開(kāi)機(jī)后藍(lán)牙可搜索但無(wú)法連接分析解決
Android14 上可能會(huì)有的問(wèn)題:
https://blog.csdn.net/wenzhi20102321/article/details/141069481