当前位置:首页 > 谈天说地

Android自定义定时闹钟开发

34资源网2022-09-13331

本文实例为大家分享了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 < 5) {
                 toast.maketext(mcontext,"23:00~04:59,要好好睡觉的,这是长身体的黄金时间哦~", toast.length_long).show();
                 } else {
        //一个补全显示的时间
                  if(hourofday < 10 && minute > 10) {
                  string times = "0" + hourofday + ":" + minute;
                  tv_play.settext(times);
                  }else if(minute < 10 && hourofday < 10) {
                  string times = "0" + hourofday + ":" +  "0"+ minute;
                  tv_play.settext(times);
                  } else if(minute < 10) {
                  string times = hourofday + ":" +  "0" + minute;
                  tv_play.settext(times);
                    } else {
                  string times = hourofday + ":" + minute;
                  tv_play.settext(times);
                    }
                   mdate = tv_play.gettext().tostring();
                    }
                 } catch (exception e) {
                  e.printstacktrace();
            }
      }
    //设置初始时间
        , c.get(calendar.hour_of_day)
        , c.get(calendar.minute)
      //true表示采用24小时制
  , true).show();

默认样式

可滚动样式

设定好的时钟布局显示,在这个主页面上看个人喜欢怎样的布局,可用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);
        @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();
    }
}

总结

这是本人最近写的一个自定义闹钟提醒,代码并不是全部代码,但是主要的函数以及内容都以及在上面阐述了。小小的尝试了一下,代码写的也不是特别的好,但是功能效果也是实现了的,在这里记录一下思路还有代码,做一个学习笔记。希望各位大佬们多指教,也希望能给大家带来一些灵感。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/22060.html

分享给朋友:

相关文章

全职妈妈自己创业干点什么好?适合全职妈妈创业的项目分享

全职妈妈自己创业干点什么好?适合全职妈妈创业的项目分享

作为全职妈妈的你肯定还在担心家里的开支问题吧?因为生活压力太大,很多全职妈妈想着在家照顾孩子的同时想通过自己的努力创业。那么,全职妈妈自己创业干点什么好呢?下面,小编整理了四个适合全职妈妈创业的项目,大家一起来看看吧。…

保持好奇心,是改变自己领导方式的方法

保持好奇心,是改变自己领导方式的方法

从理论上来说,做领导的,好奇心是一个基本行为选项。我们尊崇像史蒂夫·乔布斯(Steve Jobs)和托马斯·爱迪生(Thomas Edison)这样的世界级企业领袖,商业期刊也经常赞美好奇心是如何宝贵。但在日常实践中,谁有时间好奇这、好奇那…

抖音黄v认证有什么好处(抖音流量高的是蓝v和黄v)

抖音黄v认证有什么好处(抖音流量高的是蓝v和黄v)

我将要在这里告诉你们关于抖音号橱窗蓝v抖音小店所有的知识,认真看完。…

华为p40pro参数配置(p40与p40pro参数对比)

华为p40pro参数配置(p40与p40pro参数对比)

据网友反馈,华为 P40/Pro 系列开始推送鸿蒙 HarmonyOS2.0.0.1 66 (C00E160R3P6),大小 1.26 GB。 IT之家获悉,本次更新相机将新增多机位拍摄模式,通过变换机位拍摄,获得镜头更丰富的精彩视频和照…

软件解压后怎么安装(手机解压软件app免费软件)

软件解压后怎么安装(手机解压软件app免费软件)

在PC端宅男、极客们会碰到需要解压缩文件的情况,这个时候大多会用到360压缩或者好压等第三方软件,然而到了移动手机端,由于自带的文件管理器大多不支持输入密码解压缩等复杂操作,让不少人对于手机解压缩文件失望,但是有时候电脑不在身边,又不得不在…

怎么用电脑开wifi热点(笔记本电脑连接wifi教程)

很多的时候我们手里不会随时准备着路由器,所以经常会导致手机等移动设备缺乏wifi使用。其实,一根网线、一台Win10笔记本就能轻松设置Wifi共享,并且借助Win10自带的移动Wifi热点就能轻松实现Wifi共享,提供给其他笔记本或手机、平…