V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
think2011
V2EX  ›  Android

很好奇悬浮版的车机高德是怎么样实现的?

  •  
  •   think2011 · 250 天前 · 4617 次点击
    这是一个创建于 250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到居然可以将高德地图窗口化,所以某些车机桌面可以类似 carplay 那样,左侧高德,右侧音乐,并且可以直接在窗口上操作高德

    这是怎么样实现的? 似乎也不需要 root ,感觉挺厉害的

    15 条回复    2023-06-29 08:49:48 +08:00
    CyJaySong
        1
    CyJaySong  
       250 天前
    画中画
    olbb
        2
    olbb  
       250 天前
    就是悬浮窗吧, 跟小窗播放视频一个原理
    ysy950803
        4
    ysy950803  
       250 天前
    可能是应用自己用悬浮窗口开发的,也可能是系统的小窗模式(国内那些 ROM 基本都有这个功能,不需要应用本身怎么适配),不算什么新鲜东西了。
    ebushicao
        5
    ebushicao  
       249 天前
    很多是车企找高德合作的(付费给高德合作),所以很多车机里的高德更新的很慢。
    ofnh
        6
    ofnh  
       249 天前   ❤️ 1
    你在 B 站问了我,我在这回你一下

    首先,高德是二次修改过的,真假了一些代码以及删除了一些代码,具体的话可以对比一下官方包和修改包的区别

    关于如何启动悬浮窗 /画中画,看下面代码

    ```
    private void showMap() {
    Intent intent = new Intent();
    intent.setAction("com.autonavi.plus.showmap");
    intent.putExtra("x", 0);
    intent.putExtra("y", 0);
    intent.putExtra("w", 0);
    intent.putExtra("h", 0);

    sendBroadcast(intent);
    }

    private void hideMap() {
    Intent intent = new Intent();
    intent.setAction("com.autonavi.plus.closemap");
    sendBroadcast(intent);
    }
    ```

    其中你需要替换具体的值

    发送具体的广播就可以让高德悬浮起来了(请注意,悬浮窗权限一定要给)
    详细效果和下载请看这个文章

    [领克 05/领克 01HY3.1 高德地图开启画中画功能] https://www.bilibili.com/video/BV1KM411P7Hu/?share_source=copy_web&vd_source=758d3c51534003ffa4c7c8489ce795cf
    ofnh
        7
    ofnh  
       249 天前   ❤️ 1
    fix:真假->增加

    以上代码对某些桌面的高德有效(嘟嘟桌面等)

    另外画中画还有一种实现方式,就是反射 android.app.ActivityView ,门槛比较高,需要 root 或者有系统级签名
    think2011
        8
    think2011  
    OP
       249 天前
    @ofnh 没想到大佬也在这

    我的车机估计比较特殊,似乎删减了很多权限,甚至悬浮窗功能都要通过 adb 手动启动才行,app 无法主动申请悬浮窗权限


    嘟嘟桌面的话也安装了,由于打开不了里面的系统插件功能(文案为开启 android 系统插件),所以也无法使用画中画,奇怪的是我安装了另一款名为 ATV 的桌面,能正常的调用系统插件


    目前无法 root (没有 usb 调试权限和任何系统界面可开启,但有无线 adb 调试),所以也无法搞定 carplay ,就想到了自己开发一个 左侧高德,右侧音乐的 app 自用
    wavever
        9
    wavever  
       249 天前 via Android
    有可能是 suface reparent 到 Taskview 这种
    ofnh
        10
    ofnh  
       249 天前   ❤️ 1
    @think2011
    权限问题的话,只能是你就自己解决了,车机和手机不一样,车机相对封闭,无法完全像手机一样

    你说的 android 系统插件应该是 widget 吧,你可以自己用 AppWidgetHost 去调用具体的组件,但是实际效果并不好

    我上面说的嘟嘟桌面,其实是嘟嘟桌面定制版,比如比亚迪定制版之类的,他们的画中画其实就是悬浮窗
    shuianqingfeng
        11
    shuianqingfeng  
       248 天前
    难怪更新慢 现在明白原理了
    think2011
        12
    think2011  
    OP
       248 天前
    @ofnh 还有一个关键的问题忘记问了

    android 是可以直接嵌入例如高德的 apk 吗? 如果不行的话,是怎么做到将高德嵌入到的 app ,实现画中画的,还是反编译,或者是官方、第三方的 api ,我搜索了一圈、github 也找了,好像并没有公开的地方可以拿到我能嵌入到我的 app 的高德

    我并不是做 android 开发的,如果问题太愚蠢的哈,见谅哈
    ofnh
        13
    ofnh  
       248 天前   ❤️ 1
    @think2011
    无法嵌入 apk 的
    画中画实现方式有几种
    1 、伪画中画:使用悬浮窗版的高德,配合程序页面进行切换覆盖,可以达到肉眼画中画的效果,这也是门槛最低的方式
    2 、系统底层实现:如方易通的 rom ,在底层就已经提供对应的 api 了,可以直接调用
    3 、ActivityView:如上所说,门槛比较高,需要 root 或者系统级签名,这种实现方式在网上可以查到对应的代码
    4 、修改高德:难度比较大,对高德的修改也比较多

    所以综上所述,建议你使用方式 1 ,门槛相对比较低,也符合你的需求

    另外......一个.net 路过.....
    think2011
        14
    think2011  
    OP
       248 天前
    @ofnh 咦,那人家的悬浮版高德是怎么做的。 官方的高德悬浮窗记得不能直接操作,点击后就放大了

    😯 噢,难道说悬浮版高德其实就是难度比较高的 4 ,可能反编译或者怎么样的修改了高德

    谢大佬,我折腾看看
    ofnh
        15
    ofnh  
       248 天前
    @think2011
    悬浮版高德也是经过修改的,但是有现成的,你可以直接用,就不需要你再经一手修改了

    有可能你说的悬浮版是大插件版本?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2565 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 342ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.