闲置手机改摩托车车机导航,支持短时停车休眠,长时停车断电,点火开机(大屏平板也可参照此方案用于汽车)。
本文以安卓11为例,必须解锁bootload,且刷入第三方recovery。
这里使用面具(magisk)作为root示例方案。各大应用商店均可下载。

获取手机boot镜像(boot.img),从升级包中提取出来。记住保存的地址,等一会能用到。

使用magisk修补boot镜像。打开软件确认初始状态,Magisk一栏当前显示无法获取。点击Magisk一栏右上角安装按钮。

选择修补镜像,然后下一步。

选择并修补一个文件,选中刚才解压出来的boot.img。

记住输出地址,使用第三方recovery将该文件刷入到boot分区即可获取ROOT权限。

PS C:\Users\xxxx> adb --version
Android Debug Bridge version 1.0.41
Version 33.0.3-8952118
Installed as C:\software\adb\adb.exe


连接手机,输入adb devices,确保有类似的响应
PS C:\Users\xxx\ adb devices
List of devices attached
940f4268 device
重启到 bootloader 模式
adb reboot-bootloader
禁用关机充电功能(即为充电即开机)
fastboot oem off-mode-charge 0
重启进入手机系统
fastboot reboot
如果无效,使用下面的第二种方案,稍微麻烦一点。
连接手机,输入adb devices,确保有类似的响应。
PS C:\Users\xxx\ adb devices
List of devices attached
940f4268 device
进入adb shell环境。
PS C:\Users\xxx> adb shell
le_zl1:/ #
安卓rootfs只读,需要重新挂载根文件系统。
le_zl1:/ # mount -o rw,remount /
le_zl1:/ #
查找对应的安卓系统init.rc的位置,我这里使用安卓11,位于/system/etc/init/hw目录下。
le_zl1:/ # cd /system/etc/init/hw
le_zl1:/system/etc/init/hw # ls -l
total 68
-rw-r--r-- 1 root root 44528 2023-03-01 22:55 init.rc
-rw-r--r-- 1 root root 7690 2009-01-01 08:00 init.usb.configfs.rc
-rw-r--r-- 1 root root 5897 2009-01-01 08:00 init.usb.rc
-rw-r--r-- 1 root root 588 2009-01-01 08:00 init.zygote32.rc
-rw-r--r-- 1 root root 1028 2009-01-01 08:00 init.zygote64_32.rc
le_zl1:/system/etc/init/hw #
vim打开文件修改内容,vim怎么使用,这里不解释。
le_zl1:/system/etc/init/hw # vim ./init.rc
找到on charger,代码长度可能因为机型不同而不同,但都以on charger开头
on charger
class_start charger
在后面添加一行 setprop sys.powerctl reboot保存。
on charger
class_start charger
setprop sys.powerctl reboot
手机关机,插上充电器,确认是否自动开机。
断电关机功能,需要借助第三方软件。应用市场自行安装Tasker。

关闭电池优化(可选操作,建议设置,目的是留存后台)。

设置设备管理权限。(可选操作,建议设置,目的是更好控制手机)。

打开软件。点击不,不想了解。

新建两个任务,一个延时关机,一个停止关机

延时关机建议设置30s。

停止关机,执行停止延时关机的任务。(接入电源时,状态不稳定,会在接入和不接入之间跳动。待稳定后,需要停止误触发的关机任务)。

设置配置触发,在状态里找到电源(条件——状态——电源——电源——源:任意)。非电源任意,执行延时关机任务。


设置配置触发,在状态里找到电源(条件——状态——电源——电源——源:任意)。电源任意,执行停止关机任务。

车辆断电后,调整CPU运行策略为省电模式,频率拉到最低。每个CPU都需要调整。上限频率和下限频率全部拉到最低。

系统锁屏,等3分钟后如果未接通电源,打开飞行模式,关闭定位。应付短时间停车,重新定位和联网需要时间,停车时间在三分钟内重新点火会打断计时操作,只会息屏不会继续往下执。
亮屏时间改为15s,是应付断电息屏后,人为操作再次点亮屏幕的持续时间。不添加此项,就会使用接通电源的亮屏时间,长时间亮屏,不利于低功耗。

关闭定位和联网后,入极低功耗待机状态。等待2小时后若没有接通电源,在关机。应付长时间停车。

实际测试,执行完前10步后,功耗极低,这种状态下待机三天,掉电都极少。我这个给备用机已经使用六年了,电池损耗很大,要是不低功耗处理,正常待机最多两天就关机了。即使是这样,使用低功耗处理后,等他没电关机,最少也能待机用半个月。根据需要去除关机的操作。

和上面相反。CPU调整运行策略为按需。上限拉到最高,下限拉到最低。

禁用自动调整亮度,长时间亮屏(不息屏),最大亮度。

关闭飞行模式,打开高精度定位。

安装嘟嘟桌面,我觉得这个是比较好用的,自行搜索安装。

设置为默认桌面,启动后如图。






买一个防水的点烟器,接控制供电,最好不要接电瓶(接电瓶没法实现断电关机)。可以接钥匙上。
大概买个这样的就行,盖子有嵌入凹槽即可。最好买铜芯的,我这个图片应该是铁的,后期可能会生锈。

手机支架自行选购吧,我买的是这种带塑料外套的,能防泼溅。放室外淋雨估计不行。

本方案手机电池未拆除,夏天建议不要长时间停在太阳下面接受太阳直射。这可能会引起高温爆炸。若不放心可在此方案的基础上去除电池。
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
我有一个应用程序正在从Ruby迁移到JRuby(由于需要通过Java提供更好的Web服务安全支持)。我使用的gem之一是daemons创建后台作业。问题在于它使用fork+exec来创建后台进程,但这对JRuby来说是禁忌。那么-是否有用于创建后台作业的替代gem/wrapper?我目前的想法是只从shell脚本调用rake并让rake任务永远运行......提前致谢,克里斯。更新我们目前正在使用几个与Java线程相关的包装器,即https://github.com/jmettraux/rufus-scheduler和https://github.com/philostler/acts
Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:AmazonAPIlibraryforPython?我正在寻找一个AmazonAPI,它可以让我:按书名或作者查找书籍显示书籍封面获取有关每本书的信息(价格、评级、评论数、格式、页数等)Python或Ruby库都可以(我只想要最容易使用的库)。有什么建议么?我知道在SO上还有其他一些关于此的帖子,但这些API似乎很快就过时了。[几个月前我尝试了几个建议的Ruby库,但无法让它们中的任何一个工作。]