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. Bert代码详解(一)重点详细
  2. 硬盘格式化与快速格式化的区别
  3. tomcat5应用移植到WAS5.1中的一些问题及解决
  4. CMS之图片管理(2)
  5. PC-计算机动行命令里的密密!系统管理程序!
  6. 计算机在材料中的运用结课,计算机在材料科学工程中的应用的结课论文.doc
  7. c# uri.host_C#| Uri.CheckHostName()方法与示例
  8. Android PopupWindow系列 (一) —— popupWindow基本使用方略
  9. 中俄国际社区大佬共话Java,苦Lambda表达式久矣?
  10. java语言操作Oracle数据库中的CLOB数据类型
  11. servlet中web.xml配置
  12. 浙大2016计算机考研分数线,2016浙江大学考研分数线公布
  13. 如何打开别人的Android项目
  14. mac用什么软件测试硬盘好坏,Mac怎么测试硬盘速度?
  15. 高通QCA61 4A网卡驱动linux,高通创锐QCA61x4蓝牙4.1驱动程序
  16. 小米Pad退出开发者模式
  17. 如何在Windows中安全删除垃圾箱(回收站)
  18. 8002雨过天晴等冠号
  19. 论文阅读:Automatic Landmark Estimation for Adolescent Idiopathic Scoliosis Assessment Using BoostNet
  20. SQL SERVER学习记录

热门文章

  1. 用c语言简单的指针求进制,求助!C语言用指针函数实现十进制转,十六进制,八进制,二进制...
  2. zdragon 厚积薄发(博客)
  3. 不打开Wifi获取Mac地址
  4. python实现蜂鸣器演奏两只老虎
  5. Linux环境Java给图片加水印中文乱码处理
  6. 亿级用户下的新浪微博平台架构解析
  7. 面向对象系列(三)-抽象类的特点
  8. 60位移动游戏大佬共同发起成立“上方汇”
  9. Win10配置Tensorflow-GPU
  10. 网络工程师之网络规划