zoukankan      html  css  js  c++  java
  • 关于Android的闹钟

    Android的闹钟依赖两个组件。一个是AlarmManager一个是Calendar。

    先说Calendar,Calendar是一个非常方便的时间日期管理容易,它存放了日期时间信息,并且可以以各种体位set和get。

    Calendar的使用可以分为以下几步

    1、获得Calendar实例

         Calendar calendar  = Calendar.getInstance();

    2、设置或者获得日期+时间

            calendar.set(Calendar.HOUR_OF_DAY,3);
            calendar.set(Calendar.YEAR,3);
            int minute = calendar.get(Calendar.MINUTE);
            int month = calendar.get(Calendar.MONTH)+1; 

      值得注意的是,在Calendar中get的MONTH是需要+1的。

    总之你通过这个得到了一个日期+时间的数据了,现在,你要用这个数据开始设置闹钟。

      首先,我们可以想象,在闹钟时间到时,一定有一个动作。开发者通过这个动作,为闹钟响应设计行为(如打开屏幕,响起烦人的起床音乐等等)。所以我们似乎需要一个Intent。这个Intent可以打开Activity,打开Service或者发个广播。但是,这还不够。因为开发者实际上不知道这个Intent何时会发动,这完全取决于用户。因此我们需要一个PendingIntent对Intent进行包装。假设我在A.activity中设置闹钟,希望在闹钟响起时打开B.activity。我可以进行如下设置:

            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            Intent intent = new Intent(A.this,B.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(A.this , id , intent , 0);
            alarmManager.set(AlarmManager.RTC_WAKEUP , calendar.getTimeInMillis() , pendingIntent);

      其中RTC_WAKEUP这个闹钟类型,表示闹钟即使在手机休眠情况下依然会唤醒手机。calendar.getTimeInMillis()即是用户设置的闹钟时间。pendingIntent即是开发者为闹钟设计的唤醒后的动作,本例为开启B.activity。

      其中PendingIntent的设置中的id非常令人在意。有些教程将它直接设为0,似乎闹钟也能正常工作。

      其实不然!通过查阅资料了解,如果将id直接设为0,闹钟将只能设置一个,后面设置的闹钟将覆盖前面设置的闹钟。因此,开发者在设计闹钟时,一定要给每个闹钟设置一个id用以区别它们,否则将会引起PendingIntent的覆盖问题。

      以上~

  • 相关阅读:
    TVB西游记-观音的眼泪化作金河送唐僧回长安
    天下没有免费的午餐是什么意思
    什么样的经历、体验或者行为等能彻底的改变一个人
    看人先看什么
    python字符串中查找指定子字符串
    字符串的分隔及连接
    流媒体服务器音视频直播平台的开发为什么需要CDN?
    微信公众号小程序如何做流媒体视频直播?
    搭建专属于自己的视频流媒体直播/点播平台都需要注意哪些事项?
    音视频流媒体服务器的虚拟直播推流失败断流无法播放如何解决?
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4349256.html
Copyright © 2011-2022 走看看