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 < 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();
    }
}

总结

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

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

时间: 2022-09-11

Android闹钟启动时间设置无效问题的解决方法

Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmManager定时唤醒Service发送心跳包. 以下是开启alarmManager的代码 //开启轮询服务 public static void startPollingService(Context context, int seconds, Class<?> cls,String action) {

简单实现Android闹钟功能

闹钟的简单实现,只有显示时间和设置闹钟. AlarmView package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import a

简单实现Android闹钟程序 附源码

这个应用实现了简单的闹钟功能,关闭程序的状态中也可以进行闹钟的提醒. 这里遗留了一个问题: 如果我通过应用本身关闭程序,是可以实现我上述所说的功能,但是如果我在手机进程管理中实现应用程序的关闭操作,这个提醒就不起作用了,我很疑惑的是,我通过应用程序本身关闭了后,在进程中也是查看不到这个应用了的.所以哪位知道的帮留个言指点下,谢谢. ClockDemo.java package com.example.clock; import java.util.Calendar; import android

Android闹钟机制实现定时任务功能

Android的闹钟实现机制, 需要调用AlarmManager.set()将闹铃时间记录到系统中,当闹铃时间到后,系统会给应用程序发送广播,我们只需要去注册广播接收器就可以了. 本文分三部分讲解如何实现闹钟: 目录: 1. 设置闹铃时间; 2. 接收闹铃事件广播; 3. 重开机后重新计算并设置闹铃时间; 1. 设置闹铃时间(毫秒) private void setAlarmTime(Context context, long triggerAtMillis) { AlarmManager am

Android编程闹钟设置方法详解

本文实例讲述了Android编程闹钟设置方法.分享给大家供大家参考,具体如下: 闹钟在生活中最常见了,在Android中可以通过AlarmManager来实现闹钟,AlarmManager类专门用来设置在某个指定的时间去完成指定的时间.AlarmManager就会通过onReceive()方法去执行这些事件,就算系统处于待机状态,同样不会影响运行.可以通过Context.getSystemService方法来获得该服务.AlarmManager中的方法不少,如下: 方法 说明 Cancel 取消

Android闹钟设置的解决方案

Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 1.API19开始AlarmManager的机制修改. 2.应用程序被Kill掉后,设置的闹钟不响. 3.6.0以上进入Doze模式会使JobScheduler停止工作. 4.手机设置重启后,闹钟失效问题. API19以上AlarmManager机制的修改 API19之前AlarmManager提供了三个设置闹钟的方法,由于业务

Android编程实现闹钟的方法详解

本文实例讲述了Android编程实现闹钟的方法.分享给大家供大家参考,具体如下: 在Android中,有一个闹钟的类,AlarmManager类,我们可以通过其来对系统内的通知进行操作! 本文用到了Service和Broadcast两个后台管理,在处理时,曾出现过很多问题,但经过半天的努力,终于解决了! 首先是Main.xml文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns

Android手机闹钟用法实例

本文实例讲述了Android手机闹钟用法.分享给大家供大家参考.具体如下: 一.开发手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行.当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序. 二.在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_S

Android实现简易闹钟功能

本文实例为大家分享了Android通过广播来实现闹钟的具体代码,供大家参考,具体内容如下 1.创建广播接收RepeatingAlarm.java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class RepeatingAlarm extends BroadcastRe

Android通过AlarmManager类实现简单闹钟功能

Android通过AlarmManager类实现闹钟,供大家参考,具体内容如下 简介 闹钟是生活中最常用的功能了,很多App都可以加入该功能,提醒用户某个时刻要做的事情.在Android系统中可以通过AlarmManager类实现闹钟,AlarmManager类是专门用来设定在某个指定的时间去完成指定的事件.AlarmManager提供了访问系统警报的服务,只要在程序中设置了警报服务,AlarmManager就会通过onReceive()方法去还行这些事件,就算系统处于待机状态,同样不会影响运行

基于Alarmmanager实现简单闹钟功能

本文实例为大家分享了Alarmmanager实现简单闹钟功能的具体代码,供大家参考,具体内容如下 代码: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="matc

Android基于AlarmManager实现用户在线心跳功能示例

本文实例讲述了Android基于AlarmManager实现用户在线心跳功能.分享给大家供大家参考,具体如下: 在做即时通信或者其他检测是否在线等操作时要用到心跳.比较常用的是AlarmManager全局定时器 去实现. AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个

Android仿直播类app赠送礼物功能

直播界面 实现的是播放本地的视频文件: /** * 直播界面,用于对接直播功能 */ public class LiveFrag extends Fragment { private ImageView img_thumb; private VideoView video_view; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup containe

Android使用CountDownTimer类实现倒计时闹钟

下面使用CountDownTimer类实现倒计时小闹钟,CountDownTimer类其实很简单,一般只需重写其onFinish和onTick方法就可以实现倒计时小闹钟,代码如下: MainActivity: package com.home.brewclock; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.CountDownT

Android中AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介 AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver).本文将讲解一下如何使用AlarmManager实现定时提醒功能. 闹钟配置 周期闹钟 Intent intent = new Intent(); intent.setAction(GlobalValues.TIMER_ACTION_REPEATING); Pendi

Android基于socket实现的简单C/S聊天通信功能

本文实例讲述了Android基于socket实现的简单C/S聊天通信功能.分享给大家供大家参考,具体如下: 主要想法:在客户端上发送一条信息,在后台开辟一个线程充当服务端,收到消息就立即回馈给客户端. 第一步:创建一个继续Activity的SocketClientActity类,包为com.pku.net 编写布局文件socketclient.xml,代码如下: <?xml version="1.0" encoding="utf-8"?> <Lin

Android 使用AlarmManager和NotificationManager来实现闹钟和通知栏

实现闹钟运行的效果如下: 通知栏的运行后效果图如下: 布局文件(activity_main.xml) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&qu