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设置系统闹钟相关推荐

  1. 安卓日历每日提醒_android 设置系统闹钟和系统日历提醒

    现在有一个定时提醒的功能, 用 AlarmManager 自己来做,有多少坑做过的都知道.(应用被kill, 应用保活,息屏,关机重启,多版本兼容问题...).要自己做一个完善的不是 1-2天就能搞定 ...

  2. android 调系统闹钟,Android 开发设置系统闹钟

    必须的权限:? < uses-permission android:name="com.android.alarm.permission.SET_ALARM" />? ...

  3. android系统应用程序设置时间,Android应用程序设置系统时间的方法

    Android应用程序获取系统时间的方法: System.currentTimeMillis(); Android SDK虽然提供了设置系统时间的方法SystemClock.setCurrentTim ...

  4. Android开发技巧——设置系统状态栏颜色

    开门见山,先来三张效果图: 然后我们再来讲如何实现以及如何快速地实现. 如何实现 实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上.这是因为,在这个版本以下,没有任何的A ...

  5. Android 恢复出厂设置(系统时间不修改)

    Android恢复出厂设置时,只会将/data和/cache分区进行清除,时间和其他分区不会清除, 时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动 ...

  6. android改变系统语言,Android 9.0设置系统语言

    1.系统权限 android:sharedUserId="android.uid.system" 2.签名 通过手动签名的方式,用系统的签名文件为程序签名解决签名的问题,将程序加入 ...

  7. Android 9.0设置系统语言

    1.系统权限 android:sharedUserId="android.uid.system" 2.签名 通过手动签名的方式,用系统的签名文件为程序签名解决签名的问题,将程序加入 ...

  8. Android App 设置系统时间,语言和时区、系统重启

    文章目录 说明 1. 修改系统时间 1. 设置系统时间(仅设置xx:xx) 2. 设置系统日期(仅设置到xxxx年xx月xx日) 3.设置系统是否自动获取时间 4.判断系统是否自动获取时间 2. 修改 ...

  9. uni-app设置安卓系统闹钟

    setAlarm(hour,minutes,message) {var that = this;var Intent = plus.android.importClass('android.conte ...

  10. android intent铃声选择,Android 设置系统铃声和系统音量

    android系统铃声设置 public class Main extends Activity { /** Called when the activity is first created. */ ...

最新文章

  1. 04 集成学习 - Boosting - AdaBoost算法构建
  2. 在NodeJS中操作文件常见的API
  3. PhiSpy:在细菌基因组中识别噬菌体
  4. 输出三角形(3.12)(Java)
  5. TNonblockingServer 连接管理
  6. 面试题11. 旋转数组的最小数字
  7. 编程基础C——常量,变量,运算符个人总结
  8. 过程、性能基线、性能模型与目标之间的关系
  9. vba listbox 内容输出到文本_利用FSO对象读取文本文件的信息
  10. 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
  11. 产品开发管理方法工具流程 pdf_HR必备薪酬和绩效管理方法论、工具、案例
  12. IT行业上盘与碟的区别
  13. 黑魔法-伪类匹配列表数目实现微信群头像CSS布局的技巧
  14. 掌握python机器学习-读书笔记8 (抽样回归算法)
  15. 程序员像妹子表白专用代码
  16. Oracle更新(update)
  17. 通过Exchange Online(Office365)地址簿策略实现用户地址簿隔离
  18. 工业数字化转型 — 工业机器人
  19. linux根目录爆满解决方法
  20. 不宜深交的五类职场人

热门文章

  1. 【论文笔记】Toward A Thousand Lights Decentralized Deep Reinforcement Learning for Large-Scale TSC...
  2. 强化学习——Sarsa算法
  3. 异步FIFO跨时钟域亚稳态如何解决?
  4. word教程之word2007和2010版本查找和替换快捷键介绍
  5. 2019 年第 33 周 DApp 影响力排行榜 | TokenInsight
  6. java 给图片加水印整理:2种方法
  7. python3总结和spider爬虫
  8. 前端每日实战:77# 视频演示如何用纯 CSS 创作旗帜飘扬的动画
  9. 如何卸载重装Adobe Acrobat
  10. 《阅读的方法》做一点小努力