Android 通过AlarmClock设置系统闹钟
android系统中,要用闹钟的形式及时地提醒用户,要怎么做呢?
背景
如果通过android系统中的AlarmManager设置闹钟。因为通过AlarmManager设置闹钟,需要考虑到国内厂商对于android系统的定制化,应用进程很难常驻,加上当进程被kill的时候,或是手机关机的时候,用户在应用中设置的闹钟往往无法及时触达用户,影响功能的正常使用。
如果是往手机自带的系统闹钟应用中设置闹钟,是一个不错的选择,这样就能够保证提醒的及时性。
接口内容
android系统提供了一个provider——AlarmClock,可以通过startActivity的形式。设置闹钟的
1)文本内容
2)具体提醒时间
3)是否震动
4)媒体声音
5)是否跳过页面
详见API
http://www.android-doc.com/reference/android/provider/AlarmClock.html
兼容性
由于系统闹钟是系统应用,只能设置闹钟的小时和分钟,铃声以及是否震动;需要通过系统提供的接口进行闹钟设置、取消、闹钟列表。预研之后发现这几个接口都有版本的兼容性问题:
1)设置闹钟的接口在android系统4.4以上才支持,对于这种系统兼容性问题,只能通过版本的判断去规避异常;
2)闹钟取消的接口在android系统6.0以上才支持,而且尝试过几台6.0以上的机型,都触发ActivityNotFound的异常。除了系统提供的接口之外,当出现异常的时候,我们可以通过跳转到闹钟应用的方式让用户手动取消闹钟,这个时候厂商兼容问题又出现了,需要结合包名跳转和action跳转的方式,来避免找不到的问题;
3)通过覆盖测试发现oppo机型对于同内容的设置闹钟接口的重复调用,会生成重复的闹钟。针对oppo的问题,每当触发设置一场比赛的闹钟的时候,则通过设置sp标识,防止闹钟的重复设置,解决重复设置的问题;提醒项开关状态变化的时候进行sp标识的重置;
4)在设置闹钟时机触发后,调用设置接口设置系统闹钟的时候,经常会遇到连续设置失败的问题,这个时候每设置一个闹钟,就延迟一段时间,再去设置下一个,可以完美解决问题。
设置闹钟
public static boolean setSystemAlarmClock(Context context, String message, int hour, int minute) {if (Build.VERSION.SDK_INT < 9) {return false;}Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);intent.putExtra(AlarmClock.EXTRA_MESSAGE, message);intent.putExtra(AlarmClock.EXTRA_HOUR, hour);intent.putExtra(AlarmClock.EXTRA_MINUTES, minute);if (Build.VERSION.SDK_INT >= 11) {intent.putExtra(AlarmClock.EXTRA_SKIP_UI, true);}if (Build.VERSION.SDK_INT >= 19) {intent.putExtra(AlarmClock.EXTRA_VIBRATE, true);}try {context.startActivity(intent);return true;} catch (Exception e) {e.printStackTrace();return false;}}
跳转到闹钟页面
1)通过系统闹钟包名(com.android.deskclock)跳转,如果厂商修改了包名,则需要另外去适配;
2)通过action为AlarmClock.ACTION_SHOW_ALARMS进行跳转;
取消闹钟
尝试在国内厂商的多个机型上调用系统取消闹钟的接口,但是一直无法成功,存在适配问题,所以只能通过跳转到闹钟页面,提示用户手动取消。
小结
1)使用系统接口的时候,需要多看API;
2)开发的时候需要多考虑系统版本、机型的适配问题;
3)一个方法行不通,可以从其他角度切入;
Android 通过AlarmClock设置系统闹钟相关推荐
- 安卓日历每日提醒_android 设置系统闹钟和系统日历提醒
现在有一个定时提醒的功能, 用 AlarmManager 自己来做,有多少坑做过的都知道.(应用被kill, 应用保活,息屏,关机重启,多版本兼容问题...).要自己做一个完善的不是 1-2天就能搞定 ...
- android 调系统闹钟,Android 开发设置系统闹钟
必须的权限:? < uses-permission android:name="com.android.alarm.permission.SET_ALARM" />? ...
- android系统应用程序设置时间,Android应用程序设置系统时间的方法
Android应用程序获取系统时间的方法: System.currentTimeMillis(); Android SDK虽然提供了设置系统时间的方法SystemClock.setCurrentTim ...
- Android开发技巧——设置系统状态栏颜色
开门见山,先来三张效果图: 然后我们再来讲如何实现以及如何快速地实现. 如何实现 实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上.这是因为,在这个版本以下,没有任何的A ...
- Android 恢复出厂设置(系统时间不修改)
Android恢复出厂设置时,只会将/data和/cache分区进行清除,时间和其他分区不会清除, 时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动 ...
- android改变系统语言,Android 9.0设置系统语言
1.系统权限 android:sharedUserId="android.uid.system" 2.签名 通过手动签名的方式,用系统的签名文件为程序签名解决签名的问题,将程序加入 ...
- Android 9.0设置系统语言
1.系统权限 android:sharedUserId="android.uid.system" 2.签名 通过手动签名的方式,用系统的签名文件为程序签名解决签名的问题,将程序加入 ...
- Android App 设置系统时间,语言和时区、系统重启
文章目录 说明 1. 修改系统时间 1. 设置系统时间(仅设置xx:xx) 2. 设置系统日期(仅设置到xxxx年xx月xx日) 3.设置系统是否自动获取时间 4.判断系统是否自动获取时间 2. 修改 ...
- uni-app设置安卓系统闹钟
setAlarm(hour,minutes,message) {var that = this;var Intent = plus.android.importClass('android.conte ...
- android intent铃声选择,Android 设置系统铃声和系统音量
android系统铃声设置 public class Main extends Activity { /** Called when the activity is first created. */ ...
最新文章
- 04 集成学习 - Boosting - AdaBoost算法构建
- 在NodeJS中操作文件常见的API
- PhiSpy:在细菌基因组中识别噬菌体
- 输出三角形(3.12)(Java)
- TNonblockingServer 连接管理
- 面试题11. 旋转数组的最小数字
- 编程基础C——常量,变量,运算符个人总结
- 过程、性能基线、性能模型与目标之间的关系
- vba listbox 内容输出到文本_利用FSO对象读取文本文件的信息
- 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
- 产品开发管理方法工具流程 pdf_HR必备薪酬和绩效管理方法论、工具、案例
- IT行业上盘与碟的区别
- 黑魔法-伪类匹配列表数目实现微信群头像CSS布局的技巧
- 掌握python机器学习-读书笔记8 (抽样回归算法)
- 程序员像妹子表白专用代码
- Oracle更新(update)
- 通过Exchange Online(Office365)地址簿策略实现用户地址簿隔离
- 工业数字化转型 — 工业机器人
- linux根目录爆满解决方法
- 不宜深交的五类职场人
热门文章
- 【论文笔记】Toward A Thousand Lights Decentralized Deep Reinforcement Learning for Large-Scale TSC...
- 强化学习——Sarsa算法
- 异步FIFO跨时钟域亚稳态如何解决?
- word教程之word2007和2010版本查找和替换快捷键介绍
- 2019 年第 33 周 DApp 影响力排行榜 | TokenInsight
- java 给图片加水印整理:2种方法
- python3总结和spider爬虫
- 前端每日实战:77# 视频演示如何用纯 CSS 创作旗帜飘扬的动画
- 如何卸载重装Adobe Acrobat
- 《阅读的方法》做一点小努力