android 设置单个闹铃并取消单个闹铃,并支持多个闹铃(一)
来源:互联网 发布:免费淘宝店铺推广软件 编辑:程序博客网 时间:2024/05/30 04:25
android 有一个闹铃管理的东西叫:AlarmManager;这个用来管理闹铃的发起和停止,我们可以service,broadcastreceiver或Activity来接受AlarmManager发出的信息,AlarmManager类通过getSystemService(Activity.ALARM_SERVICE)方法来实例化;在这里注意下这几个方法:
// 取消已经注册的与参数匹配的闹铃 void cancel(PendingIntent operation) //注册一个新的闹铃 void set( int type, long triggerAtTime, PendingIntent operation) //注册一个重复类型的闹铃 void setRepeating( int type, long triggerAtTime, long interval, PendingIntent operation) //设置时区 void setTimeZone(String timeZone)
再来介绍下闹铃的几种样式:public static final int ELAPSED_REALTIME //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3。 public static final int ELAPSED_REALTIME_WAKEUP //能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 。 public static final int RTC //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。 public static final int RTC_WAKEUP //能唤醒系统,用法同RTC类型,系统值为 0 。 Public static final int POWER_OFF_WAKEUP //能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为4。
下面看下小DEMO:
入口:AlarmActivity
package com.glacier.demo;import java.util.Calendar;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.DatePicker;import android.widget.DatePicker.OnDateChangedListener;import android.widget.TextView;import android.widget.TimePicker;import android.widget.TimePicker.OnTimeChangedListener;/*** * 闹铃管理(提示:设置过去的时间会一直提示:大家在把时间设置成闹铃的时间取消即可) * @author wangyubin * */public class AlarmActivity extends Activity implements OnClickListener {private TextView mTitleTv, mDatePickerTv, mTimePickerTv;private DatePicker mDatePicker;private TimePicker mTimePicker;private Button mInstallBtn, mCancelBtn;private Calendar calendar;private int year, month, day, hour, minute;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_alarm);init();}private void init() {mTitleTv = (TextView) findViewById(R.id.tv_title);mDatePicker = (DatePicker) findViewById(R.id.datePicker);mTimePicker = (TimePicker) findViewById(R.id.timePicker);mDatePickerTv = (TextView) findViewById(R.id.tv_datepicker);mTimePickerTv = (TextView) findViewById(R.id.tv_timepicker);mInstallBtn = (Button) findViewById(R.id.btn_install);mCancelBtn = (Button) findViewById(R.id.btn_cancel);calendar = Calendar.getInstance();// 得到当前时间并设置到日历里面calendar.setTimeInMillis(System.currentTimeMillis());// 获取到当前的时间year = calendar.get(Calendar.YEAR);month = calendar.get(Calendar.MONTH);day = calendar.get(Calendar.DATE);hour = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);// 设置date控件的初始化以及监听mDatePicker.init(year, month, day, new OnDateChangedListener() {public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) {mDatePickerTv.setText("您选择的日期是:" + year + "年"+ (monthOfYear + 1) + "月" + dayOfMonth + "日");AlarmActivity.this.year = year;AlarmActivity.this.month = monthOfYear;AlarmActivity.this.day = dayOfMonth;}});// 设置24小时制mTimePicker.setIs24HourView(true);mTimePicker.setOnTimeChangedListener(new OnTimeChangedListener() {public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {mTimePickerTv.setText("您选择的时间是:" + hourOfDay + "时" + minute+ "分");AlarmActivity.this.hour = hourOfDay;AlarmActivity.this.minute = minute;}});// 设置闹铃按钮监听mInstallBtn.setOnClickListener(this);mCancelBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {// 这里讲一个我们遇到的命名的问题:仔细看case后面都带一个大括号,这样里面的switch里面的局部变量就变成了单独的case里面的局部变量,防止命名冲突case R.id.btn_install: {// 设置闹铃的时间(年,月,日,时,分,秒)calendar.set(year, month, day, hour, minute, 0);Intent intent = new Intent(this, AlamrReceiver.class);// 设置intent的动作,识别当前设置的是哪一个闹铃,有利于管理闹铃的关闭intent.setAction(year + "年" + month + "月" + day + "日" + hour + "时"+ minute + "分");// 用广播管理闹铃PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);// 获取闹铃管理AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);// 设置闹钟am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);// 设置闹钟重复时间am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 10 * 1000, pi);// 获取到的月份是0~11,所以要加1int newMonth = month + 1;mTitleTv.setText("您选择的闹铃为:" + year + "年" + newMonth + "月" + day+ "日" + hour + "时" + minute + "分");break;}case R.id.btn_cancel: {Intent intent = new Intent(this, AlamrReceiver.class);// 找出当前控件选择的闹铃时间,并关闭当前选择的闹铃intent.setAction(year + "年" + month + "月" + day + "日" + hour + "时"+ minute + "分");PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);am.cancel(pi);int newMonth = month + 1;mTitleTv.setText("您取消了" + year + "年" + newMonth + "月" + day + "日"+ hour + "时" + minute + "分" + "的闹铃!!!");break;}}}}下面看下广播的接收:
package com.glacier.demo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * 闹铃接受器 * @author wangyubin * */public class AlamrReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "闹钟时间到:"+intent.getAction(), Toast.LENGTH_LONG).show(); } }
这个广播需要注册成:
<receiver android:name=".AlamrReceiver" android:process=":remote" > </receiver>
android:process=":remote" 要注意是为了这个广播能被AlarmManager调用
还有布局文件activity_alarm:
<LinearLayout 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:layout_gravity="center_horizontal" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="@string/btn_install" /> <DatePicker android:id="@+id/datePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="27dp" /> <TextView android:id="@+id/tv_datepicker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_timepicker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btn_install" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" android:text="@string/btn_install" /> <Button android:id="@+id/btn_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" android:text="@string/btn_cancel" /> </LinearLayout></LinearLayout>
还有两个String:
<string name="btn_install">设置闹铃</string>
<string name="btn_cancel">取消闹铃</string>
看真机下效果:想抓弹出来的吐司没抓到
猿码:点击打开下载
- android 设置单个闹铃并取消单个闹铃,并支持多个闹铃(一)
- 闹铃
- 闹铃
- 闹铃设置
- Android中闹铃的设置
- android 打开闹铃的设置
- android 闹铃服务
- android闹铃服务
- Android 闹铃的实现
- android手机闹铃
- android闹铃简单实现
- Android 锁屏时也启动闹铃
- android提醒闹铃
- Android 闹铃定时器实现
- Android设置闹铃步骤(关机重启闹铃失败问题)
- 监测闹铃
- 闹铃软件
- 闹铃问题
- 虚拟机上装oracle 11g客户端总结
- ActiveMQ队列特性:组合队列(Composite Destinations)
- Android培训---支持不同的语言
- Android开发之初识Camera图像采集
- 使用SharedPreferences进行数据存储
- android 设置单个闹铃并取消单个闹铃,并支持多个闹铃(一)
- 学下Python
- S3C6410 硬件JPEG解码无关代码影响解码问题终于得以解决
- 基于感知哈希算法的中药标本相似图片的搜索
- ssh中处理事务的几种方式
- 【QT技术应用】2D绘图
- SSH简介及配置使用SSH登陆远程主机
- wince nk.bin在nandflash中的位置
- 关于段,CPL,DPL,RPL