在Android中可以通过AlarmManager 来实现闹钟,AlarmManager类是专门用来设定在某个指定的时间去完成指定的事件。AlarmManager 提供了访问系统警报的服务,只要在程序中设置了警报服务,AlarmManager 就会通过onReceive()方法去执行这些事件,就算系统处于待机状态,同样不会影响运行。可以通过 Context.getSystemService 方法来获得该服务。 AlarmManager 中的方法很少。如下所示
 
                             AlarmManager 的方法

           方法                                                                          说明

   cancel                                                                    取消AlarmManager服务

   set                                                                         设置AlarmManager服务

   setInexactRepeating                                                设置不精确周期

   setRepeating                                                          设置精确周期

   setTimeZone                                                           设置时区

要实现闹钟,首先需要创建一个继承自 BroadcastReceiver 的类,实现 onReceive
方法来接收这个Alarm服务,然后通过建立Intent 和 PendingIntent连接来调用
Alarm组件。当我们点击“设置闹钟”按钮时,通过 TimePickerDialog 来设置时间,当时间到我们指定的时间后onReceive
方法接收Alarm服务  运行效果见下图



设置闹钟时间



时间到后的Toast提示

   首先看看我们实现的接收 Alarm 服务的 AlarmReceiver类,很简单,就是在收到消息后用一个 Toast 来提示用户,代码如下:

首先,要用到闹钟,就要用到BroadcastReceiver,比如,在闹钟响时就显示一句话,那么这个类的代码如下:

package com.FeifeiSchedule.activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
/*
* author:Tammy Pi
* function:用于闹钟提醒的broadcase
*/
public class MyBroadCast extends BroadcastReceiver{ @Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.i("info","进入");
Toast.makeText(arg0,"闹钟响了",Toast.LENGTH_SHORT).show();
}
}

要用到Receiver,那么就需要在AndroidMainfest.xml中声明,该声明放在application中,activity后:

 <!-- 设置Receiver -->
<receiver
android:name=".MyBroadCast"
android:process=":remote">
</receiver>

然后,再查下数据库,满足条件的全部设置上闹钟:

//循环数据库,将闹钟事件放入
List<TbSchedule> alarmList = FeifeiScheduleService.getInstance(this).findAlarmSchedule();
for(int i=;i<alarmList.size();i++){ AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(FeifeiScheduleActivity.this,MyBroadCast.class);
TbSchedule tbSchedule = alarmList.get(i);
PendingIntent pi = PendingIntent.getBroadcast(FeifeiScheduleActivity.this,, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar calendar = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd hh:mm").parse(tbSchedule.getMydate());
TimeZone tm = TimeZone.getTimeZone("GMT");
calendar.setTimeZone(tm);
calendar.clear();
calendar.setTime(date); //设置闹钟时间
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pi);
myMap.put(tbSchedule.getScheduleid(),pi);
}catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("info",e.getMessage());
}
}

然后就只需要对"设置闹钟"、"取消闹钟" 的事件进行监听了,代码如下:

package com.yarin.android.Examples_07_07;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker; public class Activity01 extends Activity {
Button mButton1;
Button mButton2; TextView mTextView; Calendar calendar; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main);
calendar = Calendar.getInstance(); mTextView = (TextView) findViewById(R.id.TextView01);
mButton1 = (Button) findViewById(R.id.Button01);
mButton2 = (Button) findViewById(R.id.Button02); mButton1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
calendar.setTimeInMillis(System.currentTimeMillis());
int mHour = calendar.get(Calendar.HOUR_OF_DAY);
int mMinute = calendar.get(Calendar.MINUTE);
new TimePickerDialog(Activity01.this,
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view,
int hourOfDay, int minute) {
calendar.setTimeInMillis(System
.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, );
calendar.set(Calendar.MILLISECOND, );
/* 建立Intent和PendingIntent,来调用目标组件 */
Intent intent = new Intent(Activity01.this,
AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(Activity01.this, ,
intent, );
AlarmManager am;
/* 获取闹钟管理的实例 */
am = (AlarmManager) getSystemService(ALARM_SERVICE);
/* 设置闹钟 */
am.set(AlarmManager.RTC_WAKEUP, calendar
.getTimeInMillis(), pendingIntent);
/* 设置周期闹 */
am.setRepeating(AlarmManager.RTC_WAKEUP, System
.currentTimeMillis()
+ ( * ), ( * * * ),
pendingIntent);
String tmpS = "设置闹钟时间为" + format(hourOfDay)
+ ":" + format(minute);
mTextView.setText(tmpS);
}
}, mHour, mMinute, true).show();
}
}); mButton2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Activity01.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
Activity01.this, , intent, );
AlarmManager am;
/* 获取闹钟管理的实例 */
am = (AlarmManager) getSystemService(ALARM_SERVICE);
/* 取消 */
am.cancel(pendingIntent);
mTextView.setText("闹钟已取消!");
}
});
} /* 格式化字符串(7:3->07:03) */
private String format(int x) {
String s = "" + x;
if (s.length() == )
s = "" + s;
return s;
}
}

代码:这里

Android 闹钟设置的更多相关文章

  1. Android闹钟设置的解决方案

    Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 API19开始AlarmMan ...

  2. android 闹钟设置问题

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...

  3. Android简单闹钟设置

    利用AlarmManager实现闹钟设置 //设置本地闹钟,actiongString:闹钟标识 setLocAlarm(int week, String actionString) { Calend ...

  4. 关于Android中设置闹钟的相对比较完善的解决方案

    我当时说承诺为大家写一个,一直没空,直到最近又有人跟我要,我决定抽时间写一个吧.确实设置闹钟是一个比较麻烦的东西.我在这里写的这个demo抽出来了封装了一个类库,大家直接调用其中的设置闹钟和取消闹钟的 ...

  5. 关于Android中设置闹钟的相对完善的解决方案

    前些时候,有人在我「非著名程序员」微信公众号的后台问我有没有设置闹钟的demo,我当时说承诺为大家写一个,一直没空,直到最近又有人跟我要,我决定抽时间写一个吧.确实设置闹钟是一个比较麻烦的东西.我在这 ...

  6. Android闹钟 AlarmManager的使用

    Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...

  7. Android闹钟开发与展示Demo

    前言: 看过了不少安卓闹钟开发的例子,都是点到为止,都不完整,这次整一个看看. 一.闹钟的设置不需要数据库,但是展示闹钟列表的时候需要,所以需要数据库: public class MySQLiteOp ...

  8. Android闹钟【复杂版】

    最近做闹钟,所以自己写了个Demo版本,这个程序是用listview单独的类来实现的,和activity类分开来实现的!这个是用数据库进行更新的,当闹钟设置后,闹钟图片变成闹钟的样子,闹钟取消后,图片 ...

  9. android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动

    android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动            1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...

随机推荐

  1. 四则运算2--设计思路--软件工程-c++

    1.题目避免重复. 2.可定制(数量 打印方式). 3.可以控制下列参数:是否有乘除法.是否有括号.数值范围.加减有无负数.除法有无余数.是否支持分数(真分数,假分数...).是否支持小数(精确到多少 ...

  2. 角色控制器(CharacterController)

    移动: 1.SimpleMove(Vector3: vector3&speed) 简单移动,可以根据vector3方向移动,物体不需要添加刚体即受重力影响,不需要添加碰撞器即可以产生碰撞,但无 ...

  3. Ionic入门一:Hello Ionic

    1.在终端里面进入准备存放App的目录:  2.Ionic官网提供了三个项目模板blank.tabs和sideMenu ,用“ionic start myApp tabs”创建ionic项目:  ...

  4. php大文件下载

    <?php header("Content-Type:text/html;charset:utf-8"); //class FileDownServer{ //$file_n ...

  5. 图片上传前的预览(PHP)

    1.先创建一个file表单域,我们需要用它来浏览本地文件.<form name="form1" id="form1" method="post& ...

  6. hdu 2853 Assignment KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...

  7. hdu 2686 Matrix 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...

  8. 【BZOJ】【2565】最长双回文串

    Manacher算法 找出一个最长子串S=X+Y,且X和Y都是回文串,求最长的长度是多少…… 同时找两个串明显很难搞啊……但是我们可以先找到所有的回文串!在找回文串的同时我们可以预处理出来l[i]和r ...

  9. LAMP一键安装包-CentOS 5/6下自动编译安装Apache,MySQL,PHP

    http://www.centos.bz/lamp/ 此安装包已经不再维护,请使用新版http://www.centos.bz/ezhttp/. 适用环境: 系统支持:CentOS-5 (32bit/ ...

  10. The Brain as a Universal Learning Machine

    The Brain as a Universal Learning Machine This article presents an emerging architectural hypothesis ...