前言:

条件,定时关机不能关机,只能待机;要能定时“开机”(唤醒)

1.定时“关机”(待机)

众所周知android 有wakelock 在有wakelock 时不能待机,可按如下的方法进行待机;

Java:

启动force sleep 服务,只是运行force_sleep_part1.sh

SystemProperties.set("ctl.start", "force_sleep");

init.xxx.rc

定义force_sleep服务

service force_sleep /system/bin/force_sleep_part1.sh
         oneshot                                           
         disabled

force_sleep_part1.sh

切换root 运行force_sleep_part2.sh

su -s /bin/sh /system/bin/force_sleep_part2.sh

force_sleep_part2.sh

强制写/sys/power/state 来进行待机

echo mem > /sys/power/state

2.定时“开机” (唤醒)

此处折磨了我两天,终于在一个朋友的指点下找到原因。

NOTE:  在有的厂商会控制通过RTC唤醒机器的程序,比如本人开发的这个平台会根据包名判断此包名内的程序是否在唤醒机器白名单内,每个厂商可能在不同的位置控制,碰到这个问题,不要一味的找自己写的代码的问题,还是要相信自己的。查下相关的流程,看下是否在哪修改掉了;比如在我使用的BSP中

frameworks/base/services/java/com/android/server/AlarmManagerService.java

608     private static final String[] sAlarmWhiteList = {
609         "com.android.providers.calendar",
610         "com.android.alarmclock",
611         "com.android.deskclock",
612         "com.android.keyguard",
614     };
 616     /* 617      * Only packages above can set RTC_WAKEUP/ELAPSED_REALTIME_WAKEUP alarm.618      */619     private int filterType(int type, PendingIntent operation) {620         if( type == AlarmManager.RTC_WAKEUP || type == AlarmManager.ELAPSED_REALTIME_WAKEUP  ) {621             String pakeageName = operation==null?null:operation.getTargetPackage();622             for(String packet : <strong><span style="color:#ff0000;">sAlarmWhiteList</span></strong>) {623                 Slog.v("kevin", "packagename = "+ pakeageName);624                 if( packet.equals(pakeageName) ) {625                     return type;626                 }627             }628             type = (type == AlarmManager.RTC_WAKEUP ) ? AlarmManager.RTC : AlarmManager.ELAPSED_REALTIME;629         }630         return type;631     }

AlarmManager 使用比较简单,但因为上面的原因,让我反复查了几十遍;

如下:

         Calendar c = Calendar.getInstance();int length = timeonArray.length;c.set(Calendar.YEAR, timeonArray[0]);c.set(Calendar.MONTH, timeonArray[1] -1 );c.set(Calendar.DAY_OF_MONTH, timeonArray[2]);c.set(Calendar.HOUR_OF_DAY, timeonArray[3]);c.set(Calendar.MINUTE, timeonArray[4]);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0); Intent  PowerOnIntent = new Intent();PowerOnIntent.setAction(DataObject.ACTION_ALARM_POWER_ON_TIMER_OUT);PowerOnIntent.setClass(mContext, BroadcastReciver.class);mPowerOnPendingIntent = PendingIntent.getBroadcast(mContext,0, PowerOnIntent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);if (isKitKatOrLater()) {mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), mPowerOnPendingIntent);} else {mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), mPowerOnPendingIntent);}

就如上的代码就OK了。

3.android 重启

CommonUntils.ShellCommand("reboot");
Intent rebootIntent = new Intent(Intent.ACTION_REBOOT);
rebootIntent.putExtra("nowait", 1);
rebootIntent.putExtra("interval", 1);
rebootIntent.putExtra("window", 0);
mContext.sendBroadcast(rebootIntent);

基本上,按如上的方法,定时“开关”(待机,唤醒)机是没有任何问题的。

Android 实现定时开关机另类实现--BSP级相关推荐

  1. 高通平台 android 12 定时开关机

    高通平台 android 12 定时开关机 关机 关机实现 开机实现 总结 关机 AlarmManager取消了RTC_POWEROFF_WAKEUP 不支持通过AlarmManager设置关机唤醒设 ...

  2. Android系统定时开关机实现简述

    本实验基于Android6.0 一 概述: Android系统的定时开关机的实现分为定时开机和定时关机两部分,其中定时关机比较容易,因为不需要底层驱动的配合,只需要发特定广播就可以完成,而定时开机的实 ...

  3. android中定时开关机的实现

    关于android自动关机,网上有很多应用程序和例子. 相对于自动开机来说,自动关机可以在应用层通过设置alarm来实现.而自动开机,它需要底层rtc时钟的支持.我自己也没做过这个,不过在网上查到一个 ...

  4. Android 8.1 第三方apk通过数据库调用系统定时开关机功能

    由于客户需要我们提供API给到他们实现定时开关机功能 做的是展锐的方案,简单看下原厂如何实现该功能 1.展锐创建了一个sqlite数据库用来存放定时开关机相关数据 vendor\sprd\platfo ...

  5. Android 10 Settings应用如何去掉一级菜单定时开关机

    代码路径: packages/apps/Settingssrc/com/android/settings/core/gateway/SettingsGateway.java packages/apps ...

  6. Android:android定时开关机

    android定时关机 (记住一定要在源码下编译生成apk,也就是放在源码的package/app下编译!!!) 先看一下简单的图形界面吧,比较简单的实现定时关机!!!(我的上传资源中有整个工程:注: ...

  7. 魅蓝e android无限重启,魅蓝E手机怎么设置定时开关机 魅蓝E定时开关机设置图文教程...

    上手魅蓝E手机之后,整体感觉还不错,尤其是外观工艺良好,日常使用流畅度很高.此外,小编还发现魅蓝E有一个比较赞的功能,支持定时开关机,这是目前iPhone都没有的功能.话不多说,本文主要分享一下魅蓝E ...

  8. 定时开关机实现原理-Android4.4/6.0

    原址 一.寄存器介绍--RTCSA & RTCSAR 1.RTC是Real Time Clock的简称,它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是RTC仍然继 ...

  9. 定时开关机-Android4.4/6.0

    一.寄存器介绍--RTCSA & RTCSAR 1.RTC是Real Time Clock的简称,是一个时钟芯片.它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是R ...

最新文章

  1. 解决手机訪问站点时总体相对屏幕缩小问题?(已解决)
  2. IOSday01 连线和程序标识
  3. 10个实用Linux运维命令
  4. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
  5. svg入门经典pdf_机器学习最好的入门课程是什么?
  6. javascript 参数检验(二):参数检查工具的完善
  7. 打包vue项目时报错:Expected indentation of 6 spaces but found 10
  8. 80后开网店卖故事:1500多位为感觉而埋单
  9. Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类
  10. 关于windows2008重新启动需要重新设置分辨率的问题
  11. wiznote can't networking
  12. 单片机c语言串口中断函数,12手把手教你学单片机的C语言程序设计_中断服务函数.pdf...
  13. 2020年四季度混合型基金数据分析
  14. html买手机的流程图,支付流程图.html
  15. Tip | 使用GitHubDesktop提交 本地existing项目
  16. 我的世界服务器告示牌不显示,我的世界告示牌没有字_我的世界告示牌不显示字怎么用_攻略...
  17. git合并冲突【you have not concluded your merge】
  18. 个人整理shell脚本编程笔记
  19. 浏览器低延时播放监控摄像头RTSP海康大华硬盘录像机NVR视频(EasyNVR播放FLV视频流)
  20. Trojan.DL.Win32.Hmir.hl的清除方法 采用驱动提供服务的木马病毒

热门文章

  1. ffmpeg android 中文文档,Android 中使用FFMPEG
  2. win10屏幕亮度调不了(Win10屏幕亮度)
  3. 你们天天都在说的“祖传引擎”,到底能干吗?
  4. 极地求生自定义服务器僵尸模式,绝地求生自定义房间使用手册 教你如何玩僵尸模式...
  5. [附源码]Python计算机毕业设计SSM乐器销售管理系统(程序+LW)
  6. 毒蘑菇数据集的分类及评估
  7. CentOS安装教程-解决“Warning:/dev/root does not exist”问题
  8. java代码中出现黑色画线_从对象流中读取对象,请在画线处加入代码完成此程序【 】。 import java.util.*; import ja...
  9. 如何做好客服中心的管理工作,提升服务转化率
  10. cad延伸命令怎么用_cad缩放怎么用?cad怎么按比例缩放图形?