下班闹钟是先设置每天的下班时间,然后设置闹钟,到点提醒下班;护眼闹钟是设置从当前时间开始,每45分钟提醒一次,让眼睛休息一下。提醒默认振动和响铃还有灯光。

public class RemindActivity extends AppCompatActivity {private final static String TAG = RemindActivity.class.getSimpleName();private TimePicker timePicker;private Button mButton1,mButton2,mButtonCancel,mButtonCancel1;private int mHour = -1;private int mMinute = -1;public static final long DAY = 1000L*60*60*24;Context mContext;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_remind);mContext = RemindActivity.this;//获取当前时间
        Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));if(mHour == -1&& mMinute == -1){mHour = calendar.get(Calendar.HOUR_OF_DAY);mMinute = calendar.get(Calendar.MINUTE);}timePicker = (TimePicker) findViewById(R.id.timePicker);timePicker.setCurrentHour(mHour);timePicker.setCurrentMinute(mMinute);timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {@Override
            public void onTimeChanged(TimePicker timePicker, int hourOfDay, int minute) {mHour = hourOfDay;mMinute = minute;}});mButton1 = (Button) findViewById(R.id.normal_button);//设置下班闹铃
        mButton1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {Intent intent = new Intent(RemindActivity.this, AlarmReceiver.class);intent.setAction("com.example.commuting.action.outwork");PendingIntent pendingIntent = PendingIntent.getBroadcast(RemindActivity.this,0,intent,0);long firstTime = SystemClock.elapsedRealtime();//开机之后到现在的运行时间
                long systemTime = System.currentTimeMillis();//设置闹铃时间
                Calendar calendar1 = Calendar.getInstance();calendar1.setTimeInMillis(System.currentTimeMillis());calendar1.setTimeZone(TimeZone.getTimeZone("GMT+8"));calendar1.set(Calendar.MINUTE,mMinute);calendar1.set(Calendar.HOUR_OF_DAY,mHour);calendar1.set(Calendar.SECOND,0);calendar1.set(Calendar.MILLISECOND,0);//选择的每天的定时时间即下班时间
                long selectTime = calendar1.getTimeInMillis();//如果当前时间大于设置的时间,那么从第二天的设定时间开始
                if(systemTime > selectTime){Toast.makeText(mContext,"设置的时间小于当前时间",Toast.LENGTH_SHORT).show();calendar1.add(Calendar.DAY_OF_MONTH,1);selectTime = calendar1.getTimeInMillis();}//计算现在时间到设置时间的时间差
                long diffTime1 = selectTime - systemTime;firstTime += diffTime1;//进行闹铃注册
                AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,5*60*1000,pendingIntent);Toast.makeText(mContext,"设置下班提醒成功!",Toast.LENGTH_SHORT).show();}});//重复闹铃
        mButton2 = (Button) findViewById(R.id.repeating_button);mButton2.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {Intent intent = new Intent(mContext,AlarmReceiver.class);intent.setAction("com.example.commuting.action.eyes");PendingIntent sender = PendingIntent.getBroadcast(mContext,0,intent,0);long firstTime = SystemClock.elapsedRealtime();//开机之后到现在的运行时间
                long systemTime = System.currentTimeMillis();Calendar calendar2 = Calendar.getInstance();calendar2.setTimeInMillis(System.currentTimeMillis());calendar2.setTimeZone(TimeZone.getTimeZone("GMT+8"));calendar2.set(Calendar.MINUTE,mMinute);calendar2.set(Calendar.HOUR_OF_DAY,mHour);calendar2.set(Calendar.SECOND,0);calendar2.set(Calendar.MILLISECOND,0);//选择的每天定时时间
                long selectTime = calendar2.getTimeInMillis();//如果当前时间大于设置的时间,那么从第二天的设定时间开始
                if(systemTime > selectTime){Toast.makeText(mContext,"设置的时间小于当前时间",Toast.LENGTH_SHORT).show();calendar2.add(Calendar.DAY_OF_MONTH,1);selectTime = calendar2.getTimeInMillis();}//计算现在时间到设置时间的时间差
                long difTime = selectTime - systemTime;//不管将不将此句注释掉,都是每隔一分钟闹铃响一次。
                firstTime += difTime;//进行闹铃注册
                AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
//                //第一个参数int type指定定时服务的类型,该参数接受如下值:
//                /*ELAPSED_REALTIME: 在指定的延时过后,发送广播,但不唤醒设备(闹钟在睡眠状态下不可用)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。
//                *ELAPSED_REALTIME_WAKEUP: 在指定的延时过后,发送广播,并唤醒设备(即使关机也会执行operation所对应的组件)
//                * RTC:在指定的时刻,发送广播,但不唤醒设备,如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒(闹钟在睡眠状态下不可用)。
//                * RTC_WAKEUP:在指定的时刻,发送广播,并唤醒设备,即使系统关机也会执行 operation所对应的组件
//                * */
                //AlarmManager.ELAPSED_REALTIME_WAKEUP真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;
                //第二个参数表示闹钟首次执行时间
//                /*
//                * 第三个参数设为60*1000以下时,都是一分钟提醒一次。
//                * 第三个参数intervalTime为闹钟间隔,内置的几个变量如下:
//                * INTERVAL_DAY:      设置闹钟,间隔一天
//                * INTERVAL_HALF_DAY:  设置闹钟,间隔半天
//                * INTERVAL_FIFTEEN_MINUTES:设置闹钟,间隔15分钟
//                * INTERVAL_HALF_HOUR:     设置闹钟,间隔半个小时
//                * INTERVAL_HOUR:  设置闹钟,间隔一个小时
//                * */
                manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,45*60*1000,sender);Log.i(TAG,"time ="+difTime+",selectTime="+selectTime+",systemTime="+systemTime+",firstTime="+firstTime);Toast.makeText(mContext,"设置护眼闹铃成功!",Toast.LENGTH_SHORT).show();}});//取消护眼闹铃
        mButtonCancel = (Button) findViewById(R.id.cancel_button);mButtonCancel.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {Intent intent = new Intent(mContext,AlarmReceiver.class);intent.setAction("com.example.commuting.action.eyes");PendingIntent sender = PendingIntent.getBroadcast(mContext,0,intent,0);//取消闹铃
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);am.cancel(sender);Toast.makeText(mContext,"取消护眼闹铃成功!",Toast.LENGTH_SHORT).show();}});//取消下班闹铃
        mButtonCancel1 = (Button) findViewById(R.id.cancel_button1);mButtonCancel1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {Intent intent = new Intent(mContext,AlarmReceiver.class);intent.setAction("com.example.commuting.action.outwork");PendingIntent sender = PendingIntent.getBroadcast(mContext,0,intent,0);//取消闹铃
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);am.cancel(sender);Toast.makeText(mContext,"取消下班闹铃成功!",Toast.LENGTH_SHORT).show();}});}
}

广播事件及处理:

public class AlarmReceiver extends BroadcastReceiver {String soundPath = Environment.getExternalStorageDirectory()+"/";Context mContext;@Override
    public void onReceive(Context context, Intent intent) {Toast.makeText(context, "闹铃响了, 可以做点事情了~~", Toast.LENGTH_LONG).show();Log.d("AlarmRecever","闹铃响了");mContext = context;//=====================状态栏提示 start =================
        //设置通知内容并开启
        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);List<String> list = getSDCardMusic(context);//下班闹铃的响应
        if(intent.getAction().equals("com.example.commuting.action.outwork")){Notification notification1 = new Notification.Builder(context).setSmallIcon(R.drawable.ic_launcher).setContentTitle("下班时间到了").setContentText("下班时间到了,记得打卡").setWhen(System.currentTimeMillis()).setContentIntent(getDefaultIntent(PendingIntent.FLAG_UPDATE_CURRENT)).build();if(list != null && list.size() !=0){notification1.sound = Uri.parse(list.get(0));}else{notification1.defaults |= Notification.DEFAULT_SOUND;}//设置声音循环播放
            notification1.flags |= Notification.FLAG_INSISTENT;notification1.defaults |= Notification.DEFAULT_VIBRATE;notification1.defaults |= Notification.DEFAULT_LIGHTS;manager.notify(2,notification1);}//护眼闹铃的响应
        else if(intent.getAction().equals("com.example.commuting.action.eyes")){Notification notification = new Notification.Builder(context).setSmallIcon(R.drawable.ic_launcher).setContentTitle("用电脑的时间过长!").setContentText("用电脑时间有点长,眼睛需要好好休息一下。").setWhen(System.currentTimeMillis())//当用Notification.FLAG_AUTO_CANCEL时,点击通知栏后,通知栏自动消失(不是通知栏消息消失)
                    //用PendingIntent.FLAG_UPDATE_CURRENT)时,点击通知栏消息后,消息消失
                    .setContentIntent(getDefaultIntent(PendingIntent.FLAG_UPDATE_CURRENT)).build();/*
         * 添加声音可以使用默认声音,也可以自定义声音,也可以用系统声音
         * */

            if(list != null && list.size() != 0){notification.sound = Uri.parse(list.get(0));Log.d("AlarmReceiver","musicName="+list.get(0));}else{notification.defaults |= Notification.DEFAULT_SOUND;}//设置声音循环播放
            notification.flags |= Notification.FLAG_INSISTENT;/*
        * 添加振动,可以添加默认的振动defaults,也可以添加自定义振动vibrate
        * 另外还需要注意一点:使用振动器时需要权限,如下:
        * <uses-permission android:name="android.permission.VIBRATE"></uses-permission>
        * */
            notification.defaults |= Notification.DEFAULT_VIBRATE;/*
        * 设置灯光
        * */
            notification.defaults |= Notification.DEFAULT_LIGHTS;
//        notification.contentIntent = PendingIntent.getActivity()
            //不起作用
            notification.flags |= Notification.FLAG_AUTO_CANCEL;manager.notify(1,notification);// 这个notification 的 id 设为1023
        }//=====================状态栏提示 end =================
    }//获取设备SD卡中的歌曲路径
    public List<String> getSDCardMusic(Context context){String musicName;int isMusic;Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);List<String> musics = new ArrayList<>();for(int i=0;i<cursor.getCount();i++){cursor.moveToNext();musicName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
//            Log.d("AlarmReceiver","musicName="+musicName);
            isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));if(isMusic != 0){musics.add(musicName);}}return musics;}public PendingIntent getDefaultIntent(int flags){PendingIntent pendingIntent = PendingIntent.getActivity(mContext,1,new Intent(),flags);return pendingIntent;}
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:gravity="center_horizontal"
    tools:context="com.example.commutingtime.RemindActivity"><TimePicker
        android:id="@+id/timePicker"
        android:layout_centerHorizontal="true"
        android:timePickerMode="clock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></TimePicker><LinearLayout
        android:id="@+id/ll_ring"
        android:gravity="center_horizontal"
        android:layout_below="@id/timePicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"><Button android:id="@+id/normal_button"
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="设置下班提醒" /><Button android:id="@+id/repeating_button"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="设置护眼闹铃" /></LinearLayout><LinearLayout
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal"
        android:layout_below="@+id/ll_ring"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"><Button android:id="@+id/cancel_button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消下班闹铃" /><Button android:id="@+id/cancel_button"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消护眼闹铃" /></LinearLayout></RelativeLayout>

Android Notification的完整例子--设置下班闹钟和护眼闹钟相关推荐

  1. 将win7 firefox WebStorm PyCharm等JetBrains系列开发软件设置为豆沙绿护眼背景

    一. 安装win7 豆沙绿主题 玩主题已经有10来年了,从XP一直到vista,其中的乐趣乐在其中,这个主题是为了纪念这么多年来一直diy主题的自己,修改了无数个细节,采用的护眼绿豆沙最终作为最后的题 ...

  2. idea 设置背景图片、护眼主题

    idea 设置背景图片.护眼主题 Ctrl + Alt + S 调出idea的 Settings设置 设置背景色 主题同样在Settings 护眼主题加背景图片如下效果,背景图片透明度可自己调节 护眼 ...

  3. Win7,64位设置成豆沙绿护眼颜色后,vc6的visual assist 颜色失效,解决方法

    Win7,64位设置成豆沙绿护眼颜色后,vc6的visual assist 颜色失效,解决方法: Tool->Option->Format,点击ResetAll按钮

  4. dbeaver一些基本操作和设置(含有设置背景豆沙绿护眼模式)

    以前用的mysql客户端都是navicat,现在公司不让用了,今天接触到dbeaver,分享一些常用的一些知识 什么是dbeaver?它能干什么? DBeaver 是一个通用的数据库管理工具和 SQL ...

  5. ISE中使用Notepad++的关联设置以及Notepad++的护眼设置(设置背景色)

    一.ISE中使用Notepad++的关联设置 由于Notepad++使用方便,兼容性好,故使用Notepad++进行编写Verilog HDL程序是一种明智的选择,且可以设置不同的主题,背景色,优待我 ...

  6. 谷歌chrome浏览器设置成深色(护眼)模式

    打开这个对话框 输入 chrome://flags/ 然后进入 在这个搜索框输入dark 把Auto Dark 设置为Enable即可

  7. keil设置背景颜色(护眼)

    keil设置背景颜色 本人使用MDK5(前期为了能够同时编译ARM和C51做了一些小的改变,不影响)+WIN10测试通过 其他窗口颜色是基于系统设置的,本人暂时无法修改,欢迎大神留言. 一.可以通过自 ...

  8. 无套路送 智能摄像机、手环、智能闹钟、护眼台灯

    点击上方"Web项目聚集地",选择"置顶"公众号 重磅干货,第一时间送达 最近 996 话题不断升温,我们都知道 996 不会马上平息,但是我们的努力不能停止. ...

  9. Intellij idea设置背景绿色图片护眼

    第一步打开idea  按快捷键 Ctrl+Alt+s 会出现idea的设置如下. 第二步点击  Browse repositories 第三步搜索ba 选择BackgroundImage 并安装,安装 ...

最新文章

  1. OSPF末节和完全末节实验
  2. Netty原理四:客户端Bootstrap启动连接时做了些什么?
  3. 办公室自动化系统_RPA:办公自动化的下一站
  4. windows功能_你的Windows杀毒软件有这个功能吗?
  5. Linux Ubuntu jdk(环境变量)配置
  6. MinIO之Windows环境的搭建
  7. JAVA 入门教程 2
  8. 如何使用Global Mapper分幅导出地图
  9. 影楼——修图基本知识
  10. html input文字缩进,使用HTML Tidy来缩进HTML代码?
  11. 【题解】[Swerc2008]First Knight
  12. SpringSecurity+Mybatis实现用户自助注册登录(含角色),打造简单安全的注册登录页面。
  13. 什么是软件测试?这份工作到底怎么样?
  14. 对Send()函数的一些理解
  15. 数字电路(7)触发器(一)
  16. 投资时如何更好地「抄作业」?
  17. 人工智能行业调查研究报告(算法导论调查研究报告)
  18. linux清除指定登录日志,Centos清除系统日志和登录记录-Linux清除系统日志和登录记录的方法-吾爱编程网...
  19. Altera MAX+plus 11 10.0 安装教程
  20. 云主机能用来做什么?

热门文章

  1. 中外保险公司服务创新差异的比较研究
  2. 92 推荐算法——相似性推荐和协同过滤
  3. 爬取高德地图全国poi的爬虫
  4. 备忘录解决多边形游戏
  5. JavaWeb_JDK下载安装及环境配置
  6. 炉石传说 C# 开发笔记 (初版)
  7. ROS python3使用cv_bridge报错,在melodic中使用python3 cv_bridge
  8. CS中如何在没有机器人的地图里自己添加机器人
  9. excel高效办公——Excel如何将同一单元格中的日期和时间拆分(分列法)
  10. C++ 标准库概览(一分钟就看完了)