把你的旧手机改造成车载导航

时间:2021-11-23 来源:未知网络 作者:996建站网

如果你手头有一个淘汰下来的智能安卓机,想把它废物利用变成一个方便使用的车载导航,那么本文可能会对你有所帮助。

先放一个效果视频,不要在意视频中手机的位置,这位置有点太远了,只是临时摆在那示意一下。

把你的旧手机改造成车载导航插图https://www.zhihu.com/video/959911825115086848

正文开始。

我现在手头有一台淘汰下来的小米2S,当年非常好用的机器,直到现在,很多批量注册账号刷安装量或者微商群控摇一摇等还是会用这款手机。打算把它改造成车载导航,虽然屏幕不大,但基本上也就听个声音看个大致方向,屏幕小点没有特别大的问题。

车载导航要如何才能方便使用,自然是随车启动自动开机,随车熄火自动关机。那么我们要实现的全自动化流程无非就是两个:1、车辆启动->手机开机->启动导航软件,2、车辆熄火->手机关机。

上来就是最难的,就是手机随车辆启动而自动启动。唯一的判断方式就是把手机插在车辆USB或者点烟器接口上,车辆启动的时候会自动开始给手机充电。手机充电的时候让它自动启动。手头这个小米2S,可以关机状态下充电,而不是自动启动,我们需要改造一下。

第一步:充电自动开机

首先,先线刷了小米2S最新的开发版系统,并且在其安全中心开启ROOT,这是为后来实现自动关机等方便。自动关机的等会再说。记住,所有在电脑端操作的时候,电脑要尽量退出所有程序,尤其是杀毒软件和安全软件一类的,而那些手机助手,更是删掉最好,以免干扰。

ROOT成功之后,我们需要改造系统boot.img中的一个文件init.rc,这个文件里面包含了控制关机充电的代码。这里先说一个大坑,我之前试了好多次,就是从下载的ROM里直接提取出boot.img文件,然后修改,再刷入手机。这样问题就来了,这样刷出来的手机会失去ROOT,并且WIFI也无法正常开启,一堆怪现象都会出来,就是因为这个文件其实在ROOT过程中应该是有过修改的。懵逼了很久之后,我想到一个电子,直接从已经ROOT完的手机里,提取出这个文件,然后修改再刷回去,这样就可以保证修改的是最新的正确版本了。

boot.img说是一个文件,你也可以理解为是个ghost镜像,是手机里一个叫做boot的分区的镜像。我们操作的第一步就是从手机里把这个boot的分区备份一个镜像出来。我们要用到的工具是Google提供的ADB和Fastboot。Windows版下载地址:

dl.google.com/android/r

上面那个链接不用单独下,之后我会把所有用到的东西打包在一起给大家。

ADB和Fastboot不用安装,直接解压就可以用。这里再说一个坑,Google提供的Windows版本会有一个问题,就是运行的时候总是弹出adb.exe已停止工作的提示。网上找了很多原因和解决办法,多数都是退出XX程序,卸载XX程序,都没什么效果,更何况我之前说有可能有干扰的软件我们都关掉甚至卸载了。最后找到的原因竟然是因为Windows下adb有个最大连接限制是64个。解决方法也很简单,找个大神修改过的adb.exe覆盖掉就好了。

把你的旧手机改造成车载导航插图1

搞定了adb.exe的问题之后,开始用它连接手机,手机先打开开发者选项,并且开启USB调试,数据线连上电脑。按住Shift在adb.exe所在的文件夹空白处点击右键,选择“在此处打开命令窗口”,即可进入当前目录下的CMD窗口。

把你的旧手机改造成车载导航插图2

在CMD窗口中输入“adb devices”来检测一下链接状况。如果出现了“ADB server didn't ACK”的字样,那么恭喜你,你又掉进另一个坑里了。因为你的电脑上还是有别的程序在占用ADB的端口。如果你的电脑没有这个问题,可直接跳过下面的步骤,开始备份boot分区。

把你的旧手机改造成车载导航插图3

“ADB server didn't ACK”这种问题怎么解决呢?首先检查端口绑定信息,输入“adb nodaemon server”回车,一般会提示“cannot bind 'tcp:5037'”。这时候我们要来查一下5037端口是谁占用了,输入“netstat -ano | findstr "5037"”回车。看第一行那个后面有“LISTRNING”字样的数字,我这里是“892”。

把你的旧手机改造成车载导航插图4

然后我们查查这个892是谁,输入“tasklist /fi "pid eq 892"”,答案出来了,原来是“shuame_helper.exe”这个进程,这个进程是我安装的刷机精灵带的,虽然软件没启动,但这个进程依然会启动,对我们的操作进行干扰。去任务管理器结束掉这个进程就可以了。

把你的旧手机改造成车载导航插图5

下面我们再次回到刚才的CMD窗口,重新输入“adb devices”,这次返回了正确的状态。

把你的旧手机改造成车载导航插图6

刚才没有遇到“ADB server didn't ACK”的同学可以从这里继续看了。输入“adb shell”,回车,再输入“su”回车,这注意看,提示符应该已经从$符号变成了#号。最后输入“ls -al /dev/block/platform/msm_sdcc.1/by-name”回车。

把你的旧手机改造成车载导航插图7

这时候我们找到boot对应的名字是mmcblk0p17。好的记下它,我们开始备份。输入“dd if=/dev/block/mmcblk0p17 of=/sdcard/boot.img”,这里的mmcblk0p17就是刚才记下的名字。

把你的旧手机改造成车载导航插图8

稍等几秒钟,就会看到如上提示,表明你的boot.img已经备份完成了。从手机里把boot.img这个文件剪切到电脑中。这里还有一个小坑,就是不知道为什么,我备份完了,手机里用ES文件浏览器分明可以看到这个文件,但连载电脑上却看不到。重启了一下手机后就好了。

下一步就是解包这个boot.img,需要用到的工具是bootimg.exe这个解包软件。

把boot.img和bootimg.exe放在相同目录下。最好单独建个目录,把这两个文件放进去,因为后续会产生很多文件,以免混乱。用刚才说过的按Shift键的方式在此目录进入CMD。

输入“bootimg –unpack-bootimg”回车。

把你的旧手机改造成车载导航插图9

解包成功后,目录中会出现几个文件和一个initrd文件夹,在initrd文件夹中,我们找到init.rc,需要编辑的文件就是它。

打开编辑软件UltraEdit,然后把init.rc拖进去。找到“on late-init”这一行,它表示系统初始化晚期会出发的东西。我们把它后面的那段内容复制。

把你的旧手机改造成车载导航插图10

然后找到“on charger”这一行,它后面的部分表示关机充电时候它触发的内容。我们用刚才复制的内容替换掉这部分内容。也就在系统判断关机状态下开始充电的时候,不去执行显示充电图标等动画内容,而是执行正常开机的内容,这样我们的目标就达到了。

把你的旧手机改造成车载导航插图11

好,保存文件。关掉UltraEdit。

我们需要把修改的文件重新打包成boot.img。还是回到刚才的cmd窗口。输入“bootimg –repack-bootimg”回车。程序会自动把文件打包回去。现在目录下就会变成3个文件,一个程序bootimg.exe,一个原始文件boot-old.img,一个新生成的文件boot-new.img。

把你的旧手机改造成车载导航插图12

只改动了几行文字,你可能会惊讶新的文件比老文件小很多。如图,我这里老文件有30M,新文件只有不到8M。这是很正常的。因为老文件是纯粹备份出来,重新打包的文件则是文件实际的大小,不要在意就好了。

下面,我们把boot-new.img拷贝到adb.exe所在的目录,并且重命名为boot.img,在此目录打开命令窗口。同时要把手机进入到fastboot的状态。关机,同时按住音量减和电源键。这时你的手机会进入fastboot的状态,准备开始写入boot.img。

把你的旧手机改造成车载导航插图13

在命令窗口输入“fastboot flash boot boot.img”回车,开始刷写boot.img。因为文件很小,不到一秒钟就提示完成了。

把你的旧手机改造成车载导航插图14

输入“fastboot reboot”回车,可以直接重启手机。这时,你的手机已经可以实现充电自动开机了。

第二步:自动启动导航

解决了手机充电自动开机的问题之后,对手机系统底层的修改就已经结束了,剩下所有的问题都有比较简单的操作界面了。

手机开机后自动启动一个软件,有很多方法可以实现,这里我们使用一个神器:Tasker。Tasker是个可以实现非常多自动化操作的软件,如果你用熟练了,可能会帮你解决很多问题。不过我们不探讨太多,只说几个我们用的上的功能。

导航软件我选择的是高德地图车机版。最早我想用车镜版的,高德地图的车机版和车镜版的功能几乎一致,车镜版可以把画面变成精简导航模式,挺有意思的。其实车镜版还可以支持语音控制,不过需要语音助手调用高德的API,而后装的语音助手类软件貌似都没有支持高德车镜版的API,所以这个暂时用不了。而车机版则多了实实在在的3D界面,可以让横屏状态下看的视野更加宽广。如果你喜欢竖屏,也可以直接用高德地图的普通手机版本。我不喜欢手机版本那么多的功能那么多的按键,更喜欢简单一些的界面。至于为什么不选择百度地图或者凯立德等,那还用问么?当然是因为志玲姐姐的声音了。虽然现在高德的志玲姐姐已经是残次品的声音了,但还是比别的声音顺耳得多。

下载地址:

高德地图车机版

在手机上安装好中文版Tasker,给到它Root权限和自启动权限。然后在任务里建立一个新的任务,起名“启动导航”。任务里添加一个操作“程序”-“启动应用”-“高德地图”。然后建立一个配置文件,选择添加事件“系统”-“设备启动”,任务选择刚刚建立的“启动导航”。把这一切保存好,就实现了开机自动启动高德地图。

注意,第一次用Tasker启动高德地图可能会有个确认提示,允许后以后不会出现。同样,高德车机版第一次启动也会有需要你同意的提示,选中不再提示就可以了。

第三步:断电自动关机

实现断电自动关机这事,也同样是使用Tasker这个神器,不过因为我的需求会让这个操作稍微复杂点。

我不希望手机一断电就立刻关机,希望有个提示,最好是语音提示,并且延迟几秒钟再关机,这几秒钟之内,如果检测到电源恢复连接的话,就不关机了。这样可以避免使用中途偶尔接口松动或者拔错充电线的情况导致突然关机。如果那样重新开机可能需要挺长时间的。

好下面我们来操作。首先在Tasker的变量里,新建一个变量,起名为%DYZT,用这个来记录当时电源状态是否为连接,默认值设置为0。我们把连接状态定义为0,断开状态定义为1。

然后在刚才编辑好的启动导航任务中,增加一个操作“变量”-“变量设置”,名称选择%DYZT,发往输入0。这里吐槽一下翻译,这个翻译让我理解了很久,后来终于明白,所谓XX变量发往YY的意思就是把YY赋值给XX。这翻译简直……

这样操作就让手机开机的时候把这个变量的值设定成0,因为手机刚开机的时候,肯定你的电源是连接状态的。

然后我们建立一个新的任务,起名“断电关机”,里面添加如下图片的几个动作。

把你的旧手机改造成车载导航插图15

然后我们再建立一个新的任务,起名“取消关机”,里面添加如下图片的几个动作。

把你的旧手机改造成车载导航插图16

这里稍微解释一下这个流程的意思。首先断开电源的情况,触发“断点关机”任务,%DYZT赋值为1,然后系统发出语音提示“电源断开”,等待10秒后判断%DYZT值是否仍然为1,如果是就关机。这10秒钟内,如果电源重新连接上,触发“取消关机”任务,判断%DYZT是否等于1,如果等于就发出语音提示“电源恢复”,同时吧%DYZT赋值为0。

然后我们在“配置文件”中添加一个“状态”-“电源”-“电源”,选中“反转”,任务选择刚刚建立的“断电关机”,完成后把这个配置重命名为“电源断开”。

同样,再添加一个“状态”-“电源”-“电源”,这回不要选中“反转”,任务选择“取消关机”,完成后重命名为“电源连接”。

把你的旧手机改造成车载导航插图17

保存一切之后,你就完成了所有步骤。你的手机已经可以实现自动开机、自动打开高德地图、自动关机的功能了。

当然,用Tasker来实现断电关机的功能还是稍微有点麻烦的,我还会提供一个断电关机的APP来给喜欢简单粗暴的朋友们来用。傻瓜版本,直接装上就可以用了,不用设置。

工具软件

本文中所提到的工具软件打包放到了百度云上。下载地址:

pan.baidu.com/s/1B372Rq说在最后

这一篇写的非常基础,几乎可以无脑按流程操作。写这篇的原因就是网上有一些教程教你怎么实现关机充电,却很少有反过来实现充电开机的。这让很多想要让老旧手机变成导航发挥余热的人很困难。本着节约精神写了这么多,希望对大家有一点用处。

延伸一点,通过自动开机,然后自动启动不同软件,大家也可以实现一些不同的功能,比如自动启动电子狗软件、音乐软件、行车记录仪软件、无线倒车摄像头软件等等。

Tasker的部分,其实有很多更好的解决方法,不过文中的设定已经满足了我的需要,就没再改进,大家也可以提出你的想法改造成你想要的样子。更多Tasker的用法还可以参看:

你是如何使用tasker的?

如有疏漏,也请大家指出。

把你的旧手机改造成车载导航插图18

把你的旧手机改造成车载导航插图19

微信扫一扫 关注公众号

微信扫一扫 使用小程序

百度扫一扫 使用小程序