大学生
白得不能再白的小白
 
- 金币
- 1079
- 好评
- 19
- 信誉
- 101
|
本帖最后由 cmoly 于 2026-8-21 18:54 编辑
老车机了也装不了什么软件就想着给它装了个亿连,发现方向盘按键无法控制音乐播放(切歌、播放暂停)。于是有了下文
车型:17款长安cs75
车机系统:Android 4.3(API 18)
目标应用:亿连(net.easyconn)v7.1
问题:方向盘按键无法控制亿连的音乐播放
通过提取车机端本来的 百度Carlife逆向得到
- public void onReceive(Context context, Intent intent) {
- int mKeyCode = intent.getIntExtra("android.intent.extra.c3_hardkey_keycode", -1);
- int mKeyEvent = intent.getIntExtra("android.intent.extra.c3_hardkey_action", -1);
-
- if (mKeyCode == 243 || mKeyCode == 245) {
- // 下一曲
- c.a().e(16);
- }
- if (mKeyCode == 244 || mKeyCode == 246) {
- // 上一曲
- c.a().e(15);
- }
- }
复制代码
广播 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 类,发现它已经支持以下音乐控制广播:
- case 17: // net.easyconn.music.play
- sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PLAY, ECBtnEventType.EC_BTN_TYPE_CLICK);
- break;
- case 18: // net.easyconn.music.pause
- sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PAUSE, ECBtnEventType.EC_BTN_TYPE_CLICK);
- break;
- case 19: // net.easyconn.music.previous
- sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PREVIOUS, ECBtnEventType.EC_BTN_TYPE_CLICK);
- break;
- case 20: // net.easyconn.music.next
- sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_NEXT, ECBtnEventType.EC_BTN_TYPE_CLICK);
- break;
- case 21: // net.easyconn.music.play.pause
- sdkManager.q0(ECBtnCode.EC_BTN_MUSIC_PLAY_PAUSE, ECBtnEventType.EC_BTN_TYPE_CLICK);
- break;
复制代码
亿连本身支持音乐控制,只是我的车机按键发出来的不是标准的亿连广播,手动给它加个桥梁
- public class HardKeyReceiver extends BroadcastReceiver {
- private static boolean isPlaying = false;
- @Override
- public void onReceive(Context context, Intent intent) {
- int keyCode = intent.getIntExtra("android.intent.extra.c3_hardkey_keycode", -1);
- int keyEvent = intent.getIntExtra("android.intent.extra.c3_hardkey_action", -1);
- // 下一曲
- if ((keyCode == 243 || keyCode == 245) && keyEvent == 0) {
- context.sendBroadcast(new Intent("net.easyconn.music.next"));
- abortBroadcast();
- }
-
- // 上一曲
- if ((keyCode == 244 || keyCode == 246) && keyEvent == 0) {
- context.sendBroadcast(new Intent("net.easyconn.music.previous"));
- abortBroadcast();
- }
-
- // 播放暂停
- if (keyCode == 239 && keyEvent == 0) {
- if (isPlaying) {
- context.sendBroadcast(new Intent("net.easyconn.music.pause"));
- isPlaying = false;
- } else {
- context.sendBroadcast(new Intent("net.easyconn.music.play"));
- isPlaying = true;
- }
- abortBroadcast();
- }
- }
- }
复制代码
在 BroadcastManager.registerAll() 中添加:
- # 注册 HardKeyReceiver
- new-instance v0, Lnet/easyconn/framework/broadcast/HardKeyReceiver;
- invoke-direct {v0}, Lnet/easyconn/framework/broadcast/HardKeyReceiver;-><init>()V
- new-instance v1, Landroid/content/IntentFilter;
- invoke-direct {v1}, Landroid/content/IntentFilter;-><init>()V
- const-string v2, "android.intent.action.C3_HARDKEY"
- invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
- # 设置高优先级
- const/16 v2, 0x3e8
- invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->setPriority(I)V
- iget-object v2, p0, Lnet/easyconn/framework/broadcast/BroadcastManager;->mContext:Landroid/content/Context;
- invoke-virtual {v2, v0, v1}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
复制代码
然后保存所有修改传到车机方向盘按键可以正常使用了
踩坑记录:
mt去签后手机安装正常运行车机安装打不开崩溃
解决方案,安装低版本的mt去签就可以正常在车机打开了
成品在这里
|
|