公司设备需要增加蓝牙手柄,直接使用可以连接但按键事件没反应,一番研究发现得增加自定义的按键。
说明:
Android版本:6.0
蓝牙-设备协议:AVRCP
蓝牙模块:经典蓝牙模块(BT)
方式1
1.修改\system\bt\btif\src\btif_rc.c
/***************************************************************************
- Function handle_rc_passthrough_cmd
-
- Argument: tBTA_AV_RC rc_id remote control command ID
-
tBTA_AV_STATE key_state status of key press
-
- Description: Remote control command handler
***************************************************************************/
void handle_rc_passthrough_cmd ( tBTA_AV_REMOTE_CMD *p_remote_cmd)
{
…
//此处增加需要透传的AT指令
if (p_remote_cmd->rc_id == BTA_AV_RC_FAST_FOR || p_remote_cmd->rc_id == BTA_AV_RC_REWIND || p_remote_cmd->rc_id == BTA_AV_RC_F1…) {
HAL_CBACK(bt_rc_callbacks, passthrough_cmd_cb, p_remote_cmd->rc_id, pressed);
return;
}
…
}
2.修改\packages\apps\Bluetooth\src\com\android\bluetooth\avrcp\Avrcp.java
…
private void handlePassthroughCmd(int id, int keyState) {
switch (id) {
case BluetoothAvrcp.PASSTHROUGH_ID_REWIND:
rewind(keyState);
break;
case BluetoothAvrcp.PASSTHROUGH_ID_FAST_FOR:
fastForward(keyState);
break;
}
//增加将刚刚透传的按键发送出去的逻辑
}
…
方式2
1.修改\system\bt\btif\src\btif_rc.c
static const struct {
const char *name;
uint8_t avrcp;
uint16_t mapped_id;
uint8_t release_quirk;
} key_map[] = {
{ “PLAY”, AVRC_ID_PLAY, KEY_PLAYCD, 1 },
{ “STOP”, AVRC_ID_STOP, KEY_STOPCD, 0 },
{ “PAUSE”, AVRC_ID_PAUSE, KEY_PAUSECD, 1 },
{ “FORWARD”, AVRC_ID_FORWARD, KEY_NEXTSONG, 0 },
{ “BACKWARD”, AVRC_ID_BACKWARD, KEY_PREVIOUSSONG, 0 },
{ “REWIND”, AVRC_ID_REWIND, KEY_REWIND, 0 },
{ “FAST FORWARD”, AVRC_ID_FAST_FOR, KEY_FAST_FORWARD, 0 },
//增加自定义按键
{ “F1”, AVRC_ID_F1, KEY_F1, 0 },
{ NULL, 0, 0, 0 }
};
未完!
…