在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. 了解struts2 action的一些原理

    今天在struts2中的 action方法中,打印了一下当前action,即this,还打印了一下当前action引用的service, 在页面中访问该action方法2次,发现action是不一样的 ...

  2. 【每日scrum】NO.7

    Yesterday:学习和设计路线的编程 Today:编写代码 Problem:.在设计查询参观路线的时候,整个逻辑特别的混乱,设想了各种树,图以及网的遍历问题,但经过多次与同学的交流以及网上的查询资 ...

  3. Careercup - Google面试题 - 5692127791022080

    2014-05-08 22:09 题目链接 原题: Implement a class to create timer object in OOP 题目:用OOP思想设计一个计时器类. 解法:我根据自 ...

  4. 设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法

    以前网上有个英文版本的,现在自己汉化一下...O(∩_∩)O 哈哈 ~   http://www.cnblogs.com/lidabo/archive/2013/03/05/2944245.html ...

  5. Upgrading to Java 8——第三章 Optional and Similar Classes

    Java程序员对付空指针异常已经好多年了.在Java8中将有新的方式去处理他们.通过包装一个潜在的可能为null的类称为Optianal. 在Java8中添加了the Optional, Option ...

  6. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 模拟

    题目链接: http://codeforces.com/contest/670/problem/E 题解: 用STL的list和stack模拟的,没想到跑的还挺快. 代码: #include<i ...

  7. matrix_world_final_2011

    C  http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98613#problem/C 题意:输入16进制的n*m矩阵,其在二进制表示下有6种 ...

  8. javascript高级函数

    高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...

  9. 简单的表视图UITableView

    1.建一个Single View application 2.在故事板中放置一个Table View控件 3.在.h文件中加入协议 <UITableViewDataSource,UITableV ...

  10. 简单shell脚本

      简单shell脚本备忘   #!/bin/sh num= ] do table_num=`printf %03d ${num}` echo album_info_${table_num} #mys ...