手机闹铃是生活中不可缺少的重要工具,闹铃功能俨然成为手机的标准配备,直接使用手机当做闹铃的人越来越多。

Android的手机也内置了Alarm Clock, Android API中提供了AlarmManager类,可以设置在指定的时间运行某些动作。

本文通过使用AlarmManager 的set()和setRepeating()两个方法实现了两种不同类型的闹铃,一次性闹铃和周期性闹铃,具体代码如下:

1)创建类CallAlarm.java作为自定的BroadcastReceiver,当闹铃的设置时间到时,BroadcastReceiver会被唤起,并运行onReceive()里面的程序,具体代码如下

package com.example.androidapp;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class CallAlarm extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){if(intent.getAction().equals("0")){Toast.makeText(context, "一次性闹铃", Toast.LENGTH_LONG).show();}else if(intent.getAction().equals("1")){Toast.makeText(context, "周期性闹铃", Toast.LENGTH_LONG).show();}else{}}}
2)AndroidManifest.xml里面添加CallAlarm的receiver设置,让应用程序在一被启动时,就先注册这个Receiver,具体代码如下

<!-- 注册receiver CallAlarm -->        <receiver android:name=".CallAlarm" android:process=":remote"></receiver>
3)修改MainActivity.java实现设置(删除)一次性闹铃和周期性闹铃,具体代码如下

package com.example.androidapp;import java.util.Calendar;import android.os.Bundle;import android.os.SystemClock;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {private Calendar calendar=Calendar.getInstance();private Button button1=null;private Button button2=null;private Button button3=null;private Button button4=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*设置一次性闹铃*/button1=(Button)findViewById(R.id.button1);button1.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0) {/*设置一个5s后的时间*/calendar.setTimeInMillis(System.currentTimeMillis());calendar.add(Calendar.SECOND, 5);/*5s后跳转到CallAlarm.class*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("0");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);}});/*删除一次性闹铃*/button2=(Button)findViewById(R.id.button2);button2.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0) {/*取消Intent必须与启动Intent保持一致才能支持取消*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("0");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.cancel(pendingIntent);}});/*设置周期性闹铃*/button3=(Button)findViewById(R.id.button3);button3.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {/*5s一个周期跳转到CallAlarm.class*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("1");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5*1000, pendingIntent);}});/*删除周期性闹铃*/button4=(Button)findViewById(R.id.button4);button4.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {/*取消Intent必须与启动Intent保持一致才能支持取消*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("1");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.cancel(pendingIntent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

更多相关文章

  1. 浅析Android(安卓)M新功能Adoptable Storage Devices(适配的存储
  2. 简单处理Android(安卓)65536方法越界问题
  3. Android中AnimationDrawable使用的简单实例
  4. android 开发规范
  5. 【Android】说做就做:都市列表+卫星地图
  6. JIN学习一、Android使用已有C/C++代码、第三方SO库的方法
  7. Android面试题-横竖屏切换,activity生命周期的执行顺序,基于8.0,9.
  8. 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、
  9. 给大家介绍几个常见的Android代码片段

随机推荐

  1. android菜鸟学习笔记1----环境搭建
  2. Android系统启动流程 -3
  3. 【安卓笔记】BroadcastReceiver
  4. Eclipse在线安装ADT等Android插件连接不
  5. ubuntu下android真机调试
  6. android显示意图激活另一个Activity的方
  7. Android(安卓)开发
  8. Android(安卓)FFmpeg 编译.so库
  9. Android(安卓)MediaScanner
  10. [图文并茂] 在 MyEclipse 上 搭建 安装 A