返回列表 发新帖

车机版亿连方向盘按键逆向魔改

[复制链接]

11

主题

395

回帖

3344

积分

大学生

白得不能再白的小白

Rank: 5Rank: 5

金币
1079
好评
19
信誉
101
发表于 5 天前 来自手机  | 显示全部楼层 | 阅读模式  来自 广西
本帖最后由 cmoly 于 2026-8-21 18:54 编辑

老车机了也装不了什么软件就想着给它装了个亿连,发现方向盘按键无法控制音乐播放(切歌、播放暂停)。于是有了下文

车型:17款长安cs75
车机系统:Android 4.3(API 18)
目标应用:亿连(net.easyconn)v7.1
问题:方向盘按键无法控制亿连的音乐播放

通过提取车机端本来的 百度Carlife逆向得到
  1. public void onReceive(Context context, Intent intent) {
  2.     int mKeyCode = intent.getIntExtra("android.intent.extra.c3_hardkey_keycode", -1);
  3.     int mKeyEvent = intent.getIntExtra("android.intent.extra.c3_hardkey_action", -1);
  4.    
  5.     if (mKeyCode == 243 || mKeyCode == 245) {
  6.         // 下一曲
  7.         c.a().e(16);
  8.     }
  9.     if (mKeyCode == 244 || mKeyCode == 246) {
  10.         // 上一曲
  11.         c.a().e(15);
  12.     }
  13. }
复制代码


广播 action:android.intent.action.C3_HARDKEY
按键码参数:android.intent.extra.c3_hardkey_keycode
按键事件:android.intent.extra.c3_hardkey_action
243/245:下一曲
244/246:上一曲
239:播放暂停(这个是自己抓指定按键码来自定义的)


通过网络上下载的亿连车机端7.1
反编译亿连的 BroadcastManager$b 类,发现它已经支持以下音乐控制广播:
  1. case 17: // net.easyconn.music.play
  2.     sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PLAY, ECBtnEventType.EC_BTN_TYPE_CLICK);
  3.     break;
  4. case 18: // net.easyconn.music.pause
  5.     sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PAUSE, ECBtnEventType.EC_BTN_TYPE_CLICK);
  6.     break;
  7. case 19: // net.easyconn.music.previous
  8.     sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PREVIOUS, ECBtnEventType.EC_BTN_TYPE_CLICK);
  9.     break;
  10. case 20: // net.easyconn.music.next
  11.     sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_NEXT, ECBtnEventType.EC_BTN_TYPE_CLICK);
  12.     break;
  13. case 21: // net.easyconn.music.play.pause
  14.     sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PLAY_PAUSE, ECBtnEventType.EC_BTN_TYPE_CLICK);
  15.     break;
复制代码


亿连本身支持音乐控制,只是我的车机按键发出来的不是标准的亿连广播,手动给它加个桥梁

  1. public class HardKeyReceiver extends BroadcastReceiver {
  2.     private static boolean isPlaying = false;

  3.     @Override
  4.     public void onReceive(Context context, Intent intent) {
  5.         int keyCode = intent.getIntExtra("android.intent.extra.c3_hardkey_keycode", -1);
  6.         int keyEvent = intent.getIntExtra("android.intent.extra.c3_hardkey_action", -1);

  7.         // 下一曲
  8.         if ((keyCode == 243 || keyCode == 245) && keyEvent == 0) {
  9.             context.sendBroadcast(new Intent("net.easyconn.music.next"));
  10.             abortBroadcast();
  11.         }
  12.         
  13.         // 上一曲
  14.         if ((keyCode == 244 || keyCode == 246) && keyEvent == 0) {
  15.             context.sendBroadcast(new Intent("net.easyconn.music.previous"));
  16.             abortBroadcast();
  17.         }
  18.         
  19.         // 播放暂停
  20.         if (keyCode == 239 && keyEvent == 0) {
  21.             if (isPlaying) {
  22.                 context.sendBroadcast(new Intent("net.easyconn.music.pause"));
  23.                 isPlaying = false;
  24.             } else {
  25.                 context.sendBroadcast(new Intent("net.easyconn.music.play"));
  26.                 isPlaying = true;
  27.             }
  28.             abortBroadcast();
  29.         }
  30.     }
  31. }
复制代码


在 BroadcastManager.registerAll() 中添加:
  1. # 注册 HardKeyReceiver
  2. new-instance v0, Lnet/easyconn/framework/broadcast/HardKeyReceiver;
  3. invoke-direct {v0}, Lnet/easyconn/framework/broadcast/HardKeyReceiver;-><init>()V

  4. new-instance v1, Landroid/content/IntentFilter;
  5. invoke-direct {v1}, Landroid/content/IntentFilter;-><init>()V

  6. const-string v2, "android.intent.action.C3_HARDKEY"
  7. invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V

  8. # 设置高优先级
  9. const/16 v2, 0x3e8
  10. invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->setPriority(I)V

  11. iget-object v2, p0, Lnet/easyconn/framework/broadcast/BroadcastManager;->mContext:Landroid/content/Context;
  12. invoke-virtual {v2, v0, v1}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
复制代码

然后保存所有修改传到车机方向盘按键可以正常使用了
踩坑记录:
mt去签后手机安装正常运行车机安装打不开崩溃
解决方案,安装低版本的mt去签就可以正常在车机打开了
成品在这里
游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

12

主题

5246

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1590
好评
16
信誉
578

考神MT论坛帅哥MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 5 天前 来自手机  | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

19

主题

3697

回帖

8864

积分

硕士生

Rank: 6Rank: 6

金币
1368
好评
0
信誉
100

MT论坛新人MT论坛最佳新人MT论坛帅哥考神

发表于 5 天前 来自手机  | 显示全部楼层  来自 湖北
看看这是
回复

使用道具 举报

0

主题

93

回帖

247

积分

小学生

Rank: 2

金币
110
好评
0
信誉
100
发表于 5 天前 | 显示全部楼层  来自 河南
看看隐藏
回复

使用道具 举报

0

主题

549

回帖

1026

积分

高中生

Rank: 4

金币
222
好评
0
信誉
101
发表于 5 天前 来自手机  | 显示全部楼层  来自 山东
看看隐藏
回复

使用道具 举报

1

主题

1552

回帖

5316

积分

硕士生

Rank: 6Rank: 6

金币
5795
好评
0
信誉
100
发表于 5 天前 | 显示全部楼层  来自 广东
看看。。。
回复

使用道具 举报

8

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
5136
好评
1
信誉
100
发表于 5 天前 来自手机  | 显示全部楼层  来自 山东
看看隐藏
回复

使用道具 举报

2

主题

2323

回帖

7331

积分

硕士生

Rank: 6Rank: 6

金币
3650
好评
2
信誉
106

考神MT论坛帅哥

发表于 5 天前 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

7

主题

373

回帖

1411

积分

高中生

Rank: 4

金币
489
好评
6
信誉
108
QQ
发表于 5 天前 来自手机  | 显示全部楼层  来自 湖北
看看隐藏
回复

使用道具 举报

19

主题

6203

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2119
好评
0
信誉
100
发表于 5 天前 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

0

主题

47

回帖

153

积分

小学生

Rank: 2

金币
44
好评
0
信誉
100
发表于 3 天前 来自手机  | 显示全部楼层  来自 浙江
看看
回复

使用道具 举报

0

主题

47

回帖

153

积分

小学生

Rank: 2

金币
44
好评
0
信誉
100
发表于 3 天前 来自手机  | 显示全部楼层  来自 浙江
有没有UNIZ的安装软件方法
回复

使用道具 举报

1

主题

4096

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6956
好评
1
信誉
100
发表于 3 天前 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表