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