阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Android自定义定时闹钟开发详解

298次阅读
没有评论

共计 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 

默认样式

Android 自定义定时闹钟开发详解

可滚动样式

Android 自定义定时闹钟开发详解

设定好的时钟布局显示,在这个主页面上看个人喜欢怎样的布局,可用 listview 或 recycleview 实现。在这里我使用的是 recycleView+gridlayoutManager 显示网格布局,一行两个卡片展示。使用适配器去匹配 recycleview 会更好,因为这样操作方便且美观。

Android 自定义定时闹钟开发详解

闹钟增删改查

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);
        @SuppressLint("UnspecifiedImmutableFlag")
        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);
        @SuppressLint("UnspecifiedImmutableFlag")
        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");
        @SuppressLint("UnspecifiedImmutableFlag")
        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 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4113字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7798828
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...