共计 4113 个字符,预计需要花费 11 分钟才能阅读完成。
导读 | 这篇文章主要为大家详细介绍了 Android 自定义定时闹钟开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 |
本文实例为大家分享了 Android 开发之自定义闹钟实现,供大家参考,具体内容如下
闹钟时间设置及显示
闹钟的布局很简单,就是一个简单时间设置,所以自己写一个简单的布局按钮之类的也可以了,不过多赘述。另外使用时间对话框 TimePickerDialog 去设置时间,用 Calendar 可获取当前系统的时间。AlertDialog.THEME_HOLO_LIGHT 是设置 dialog 的样式,不设置的话就是一个默认的圆形时钟,设置这个之后是一个可滚动上下滑动的时钟样式。代码展示:
// 设置时间事件的点击 | |
Calendar c = Calendar.getInstance(); | |
// 创建一个 TimePickerDialog 实例,并把它显示出来。new TimePickerDialog(mContext, AlertDialog.THEME_HOLO_LIGHT, | |
// 绑定监听器 | |
(tp, hourOfDay, minute) -> { | |
try {if (hourOfDay > 22 || hourOfDay 10) { | |
String times = "0" + hourOfDay + ":" + minute; | |
tv_play.setText(times); | |
}else if(minute | |
默认样式 | |
可滚动样式 | |
设定好的时钟布局显示,在这个主页面上看个人喜欢怎样的布局,可用 listview 或 recycleview 实现。在这里我使用的是 recycleView+gridlayoutManager 显示网格布局,一行两个卡片展示。使用适配器去匹配 recycleview 会更好,因为这样操作方便且美观。 | |
闹钟增删改查 | |
sqlite 是一个安卓自带的轻量级数据库。增删改查都是对数据库的操作行为,另外使用 sqlite 去存储时钟的数据,就可以防止数据的丢失,因此可以在时钟的基础上做一个计划提醒之类的,可以把计划里的内容存储进数据库里,还有时间。可以在建立数据表的时候自带一个自增的 id,方便操作。数据库的建表这些可以去搜索编写,很简单,因此不多赘述。 | |
/** | |
* 转储数据, 写数据到数据库中,增加数据 | |
* @param sqLiteDatabase 数据库 | |
* @param context 内容 | |
* @param repeat 重复 | |
* @param date 时间 | |
* @param count 时长 | |
*/ | |
private void insertData(SQLiteDatabase sqLiteDatabase, String context, String repeat, | |
String date, String count){ | |
try {ContentValues values = new ContentValues(); | |
values.put("context", context); | |
values.put("repeat", repeat); | |
values.put("time", date); | |
values.put("count", count); | |
sqLiteDatabase.insert("data",null, values);// 新增功能 | |
} catch (Exception e) {e.printStackTrace(); | |
} | |
} | |
/** | |
* 修改数据, 写数据到数据库中,增加数据 | |
* @param sqLiteDatabase 数据库 | |
* @param context 内容 | |
* @param repeat 重复 | |
* @param date 时间 | |
* @param count 时长 | |
*/ | |
private void updateData(SQLiteDatabase sqLiteDatabase, String context, String repeat, | |
String date, String count){ | |
try {ContentValues values = new ContentValues(); | |
values.put("context", context); | |
values.put("repeat", repeat); | |
values.put("time", date); | |
values.put("count", count); | |
sqLiteDatabase.update("data",values,"id=?",new String[]{String.valueOf(mId)});// 修改功能 | |
} catch (Exception e) {e.printStackTrace(); | |
} | |
} | |
/** | |
* 删除数据库中的数据 | |
* @param sqLiteDatabase 数据库 | |
* @param id id | |
*/ | |
private void deleteData(SQLiteDatabase sqLiteDatabase, int id) { | |
try {sqLiteDatabase.delete("data","id=?",new String[]{String.valueOf(id)}); | |
} catch (Exception e) {e.printStackTrace(); | |
} | |
} | |
闹钟开启 | |
在上面的布局里,可以看到有个按键,点击它即可开启闹钟提醒,关闭它即可关闭闹钟提醒。开启闹钟的提示函数如下,将获取的时间去与系统当前时间比较,AlarmManager 设置提醒。关闭闹钟就是一个简单的 AlarmManager 取消行为。那个提醒类就是平时见到的那种简单的 dialog 提醒,所以不再次赘述。 | |
/** | |
* 开启闹钟 | |
* @param parent 父类 | |
* @param hour 小时 | |
* @param minute 分钟 | |
* @param position 位置 | |
*/ | |
private void startAlarm(ViewGroup parent, int hour, int minute, int position) { | |
try {Calendar c = Calendar.getInstance(); | |
c.setTimeInMillis(System.currentTimeMillis());// 获取当前时间 | |
// 获取当前毫秒值 | |
long systemTime = System.currentTimeMillis(); | |
c.setTimeZone(TimeZone.getTimeZone("GMT+8"));// 设置时区 | |
c.set(Calendar.HOUR_OF_DAY, hour);// 设置几点提醒 | |
c.set(Calendar.MINUTE, minute);// 设置几分提醒 | |
// 获取上面设置的时间 | |
long selectTime = c.getTimeInMillis(); | |
// 如果当前时间大于设置的时间,那么就从第二天的设定时间开始 | |
if (systemTime > selectTime) {c.add(Calendar.DAY_OF_MONTH, 1); | |
} | |
/* 闹钟时间到了的一个提醒类 */ | |
Intent intent = new Intent(parent.getContext(), ListenerActivity.class); | |
PendingIntent pi = PendingIntent.getActivity(parent.getContext(), 0, intent, 0); | |
// 得到 AlarmManager 实例 | |
AlarmManager am = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); | |
// 重复提醒 | |
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60*60*1000*24, pi); | |
} catch (Exception e) {e.printStackTrace(); | |
} | |
} | |
/** | |
* 关闭提醒 | |
* @param parent 父类 | |
*/ | |
private void stopRemind(ViewGroup parent) { | |
try {Intent intent = new Intent(parent.getContext(), ListenerActivity.class); | |
PendingIntent pi = PendingIntent.getActivity(parent.getContext(), 0, | |
intent, 0); | |
AlarmManager am = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); | |
// 取消提醒 | |
am.cancel(pi); | |
Toast.makeText(parent.getContext(), "关闭了提醒", Toast.LENGTH_SHORT).show(); | |
Intent intents = new Intent("android.intent.action.BOOKCASE_RESTART"); | |
PendingIntent pis = PendingIntent.getBroadcast(parent.getContext(), 0, | |
intents, 0); | |
AlarmManager ams = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); | |
// 取消提醒 | |
ams.cancel(pis); | |
} catch (Exception e) {e.printStackTrace(); | |
} | |
} | |
总结 | |
这是本人最近写的一个自定义闹钟提醒,代码并不是全部代码,但是主要的函数以及内容都以及在上面阐述了。小小的尝试了一下,代码写的也不是特别的好,但是功能效果也是实现了的,在这里记录一下思路还有代码,做一个学习笔记。希望各位大佬们多指教,也希望能给大家带来一些灵感。 | |
阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配 | |
腾讯云新客低至 82 元 / 年,老客户 99 元 / 年 | |
代金券:在阿里云专用满减优惠券 | |
正文完
星哥玩云-微信公众号
