定时开关机功能实现

提示:本文仅仅针对MTK平台实现需求,对其它芯片主控平台暂无借鉴可言

文章目录

  • 需求
    • 需求描述
    • 实际手机功能图
  • 资料相关说明
  • 实现方案
    • 修改方案
    • 修改内容点
      • 内置App
      • 修改MtkAlarmManagerService.java
  • 坑点解决
  • 总结


需求

实现手机一样的定时开关机功能

需求描述

在手机中,都有定时开关机功能,其次在闹铃app中,定时后,在手机关机状态下,设置的闹铃时间到后,手机先开机后闹铃。
实际产品定制中,需要有这样的定时开关机功能,系统提供这样的接口,应用调用。

实际手机功能图

在这里插入图片描述在这里插入图片描述

资料相关说明

  • mtk 平台在Android8.1 之后,就已经去掉了定时开关机功能,如果实现需要移植8.1 平台基础源码到最新的Android平台
  • 定时开关机功能 本质上就是和闹铃App 一样的方案,两种不同的形式 。本质还是通过AlarmManager 来实现的 AlarmManager 源码
  • 本文描述针对MTK系列,其它平台在闹铃设置的逻辑和定时逻辑其实是想通的。在以前 自己做过闹钟应用,API 其实一致的。
  • MTK 关机闹钟实现,低侵入式修改 framework 方案
  • Android8.1 MTK platform adds timer switch function
  • 自动开机提前2分钟

实现方案

修改方案

  • 在Android系统源码中内置Android8.1 源码对应的开关机源码,作为系统应用。 Android8.1 定时开关机源码:SchedulePowerOnOff GitHub 上面 SchedulePowerOnOff 源码
  • vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkAlarmManagerService.java 修改,适配对应的包名使其具备功能。

修改内容点

内置App

可完全参考借鉴之前文章MTK内置第三方APP-卸载不可卸载-签名问题

修改MtkAlarmManagerService.java

修改内容如下:

--- a/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkAlarmManagerService.java
+++ b/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkAlarmManagerService.java
@@ -361,7 +361,8 @@ public class MtkAlarmManagerService extends AlarmManagerService{

         // Only DeskClock is allowed to set this alarm
         if (mNativeData != 0 && mNativeData != -1) {
-            if (setPackageName.equals("com.android.deskclock")) {
+            if (setPackageName.equals("com.android.deskclock")^M
+            /*add by xzhe on 20230404*/ || setPackageName.equals("com.mediatek.schpwronoff")) {^M
                 /// M: Extra Logging @{
                 if (DEBUG_ALARM_CLOCK) {
                     Slog.i(TAG, "mBootPackage = " + setPackageName + " set Prop 2");
@@ -411,7 +412,8 @@ public class MtkAlarmManagerService extends AlarmManagerService{
             // AlarmPair tempAlarmPair = mPoweroffAlarms.remove(name);
             // it will always to cancel the alarm in alarm driver
             if (mNativeData != 0 && mNativeData != -1) {
-                if (name.equals("com.android.deskclock")) {
+                if (name.equals("com.android.deskclock")^M
+                    /*add by xzhe on 20230404*/ || name.equals("com.mediatek.schpwronoff")) {^M
                     set(mNativeData, PRE_SCHEDULE_POWER_OFF_ALARM, 0, 0);
                 }
             }

坑点解决

  • 定时闹铃和定时开机 在关机状态下,机器会提前150s,3分钟,120分钟 就开机了,我们称之为提前开机。 对于闹钟而言是正常的,但是对于定时开机而言,时间是需要准确的。解决方案要么应用端 适配、要么系统将时间设置为中间值 比如一分钟。 具体修改如下:
vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkAlarmManagerService.java  

修改POWER_OFF_ALARM_BUFFER_TIME  根据实际情况,综合修改具体时间值

什么意思呢?
/**
     * M: This alarm type is used to set an alarm that would be triggered if device
     * is in powerOff state. It is set to trigger POWER_OFF_ALARM_BUFFER_TIME ms earlier
     * than the actual alarm time so that phone is in wakeup state when actual alarm
     * triggers
     */

  • 上面提供的 定时开关机源码,只是针对系统设置添加了一个功能。具体对外释放的接口还需自己来实现。 那就是需要研究一下 SchedulePowerOnOff 源码了。还好源码比较简单,自己看看原理,对外释放接口来实现。

总结

  • 针对MTK方案实现定时开关机功能,并对外释放接口
  • 定时开关机功能和闹铃功能API上面都用到了AlarmManager.java,对于定时任务有一定的参考意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896676.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 今天给大家介绍下百度沧海存储团队在数据湖加速方面的工作进展情况。 数据湖这个概念,从 2012 年产生到现在已经有十余年的时间,每家公司对它内涵的解读都不太一样。但是数据湖的主要存储底座…

具备哪些特质的内外网文件交换系统 才是高科技企业需要的?

高科技企业是指涉及对国家产生深远和积极影响的先进技术的产业集群,它们以持续的创新和高研发投入为核心,推动科技进步和产业升级。高科技企业是市场经济的重要组成,为经济发展和技术进步提供充足动力,因此,高科技企业…

【南开X上海交大】OPUS:效率显著提升的OCC网络

1. 摘要 占据预测任务旨在预测体素化的3D环境中的占据状态,在自动驾驶领域中迅速获得了关注。主流的占据预测方法首先将3D环境离散化为体素网格,然后在这些密集网格上执行分类。然而,样本数据分析显示,大多数体素实际上是未占据的…

《15分钟轻松学Go》教程目录

在AI快速发展的时代,学习Go语言依然很有用。Go语言擅长处理高并发任务,也就是说可以同时处理很多请求,这对于需要快速响应的AI服务非常重要。另外,Go适合用来处理和传输大量数据,非常适合机器学习模型的数据预处理。 …

并查集 --- Java通用模版

什么是并查集 并查集可以解决什么问题:判断两个节点是否在一个集合,也可以将两个节点添加到一个集合中。 并查集常用于处理大规模数据下的元素分组问题,特别是在数据量极大时,使用正常的数据结构可能会导致空间或时间复杂度过高…

2024年10月21日计算机网络,乌蒙第一部分

【互联网数据传输原理 |OSI七层网络参考模型】 https://www.bilibili.com/video/BV1EU4y1v7ju/?share_sourcecopy_web&vd_source476fcb3b552dae37b7e82015a682a972 mac地址相当于是名字,ip地址相当于是住址,端口相当于是发送的东西拿什…

推荐一款功能强大的数据备份工具:Iperius Backup Full

Iperius Backup是一款非常灵活而且功能强大的数据备份工具,程序可以非常好的保护您的文件和数据的安全。支持DAT备份、LTO备份、NAS备份、磁带备份、RDX驱动器、USB备份、并且支持zip压缩和军事级别的AES 256位数据加密技术! 主要特色 云备份 Iperius可以自动地发…

STM32F1+HAL库+FreeTOTS学习18——任务通知

STM32F1HAL库FreeTOTS学习18——任务通知 1. 任务通知1.1 任务通知的引入1.2 任务通知简介1.3 任务通知的优缺点 2. 任务相关API函数2.1 发送任务通知2.1.1 xTaskGenericNotify()2.1.2 xTaskNotifyGive()和xTaskNotifyGiveIndexed()2.1.2 xTaskNotify()和xTaskNotifyIndexed()2…

【LeetCode:910. 最小差值 II + 模拟 + 思维】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

低功耗4G模组的小秘密:RSA算法示例驾到,通通闪开...

在实际应用中,低功耗4G模组的RSA算法示例具有重要的价值,所以今天我们学习合宙低功耗4G模组Air780EP_LuatOS_rsa示例: 1.简介 RSA算法的安全性基于:将两个大质数相乘很容易,但是想要将其乘积分解成原始的质数因子却非…

微信小程序广告组件被驳回之后怎么重新提交广告组件?

有时候遇到广告组件被退回的问题 这时需要重新提交一次程序代码,然后提交审核然后发布新版本之后,找到广告管理,即可看到广告组件是在正在审核状态中

CANoe_数据回放功能功能介绍_时间段(区间)选择

CANoe的日志回放功能,可以选择时间段回放,这样可以在数据量很大的时候快速定位分析数据问题点 CANoe日志回放功能概述 CANoe的日志回放功能允许用户重现和分析已记录的CAN总线或其他网络总线数据。这些日志文件通常以CANoe自己的日志格式(.b…

C#学习笔记(一)

C#学习笔记(一) 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…

【AI 大模型】智能时代的核心驱动力

1. 引言📜1.1 AI大模型的崛起与影响力🌟1.2 本文的研究目的与结构🧐 2. AI大模型的基础概念与技术原理📚2.1 定义与核心特征🎯2.2 深度学习架构基础🧠2.3 大规模数据训练的重要性📊2.4 模型优化…

15分钟学Go 实战项目一:命令行工具

实战项目一:命令行工具 1. 引言 命令行工具是开发者常用的工具之一,它可以帮助用户通过命令行界面对程序进行控制和交互。在这节中,我们将创建一个简单的命令行工具,以帮助你理解Go语言的基本语法和如何处理命令行输入。在这个过…

HarmonyOS NEXT 应用开发实战(六、组件导航Navigation使用详解)

在鸿蒙应用开发中,Navigation 组件是实现界面间导航的重要工具。本文将介绍如何使用 Navigation 组件实现页面跳转及参数传递,确保你能轻松构建具有良好用户体验的应用。 当前HarmonyOS支持两套路由机制(Navigation和Router)&…

Dongle Sentinal在Jenkins下访问不了的问题

背景: 工作站部署的jenkins的脚本无法正常打包,定位后发现是本地获取不了license,但是使用usb over network的远程license都能获取并正常打包 分析: 获取不了license的原因是本地无法识别dongle。根据提供信息,之前…

力扣76~80题

题76(困难): 分析: 这道题其实不难,但是是我做最久的了,我居然去用res去接所有可能得值,然后再求长度导致空间暴力,我还以为是我queue的问题。。。 最后用暴力求解解的&#xff0c…

Apache Seata Raft模式配置中心

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata Raft模式配置中心 title: Seata Raft模式配置中心 author: 蒋奕晨-清华大学&…

Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…