android程序闹钟服务的实现流程:
1、获得系统的闹钟提醒管理服务:AlarmManager alm = (AlarmManager) getSystemService(ALARM_SERVICE);
2、设置闹钟要调用的PendingIntent:alm.set(AlarmManager.RTC_WAKEUP, c2.getTimeInMillis(), pi);
3、指明PendingIntent要发送的广播:PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
4、指明广播接收器的类:
Intent intent = new Intent();
intent.setClass(this, AlarmNote.class);
5、通过AlarmNote这个广播接收器类,调用最好的闹钟报警对话界面:
Intent in=new Intent();
in.setClass(context, Alarm.class);
in.putExtra("messageTitle", messageTitle);
in.putExtra("messageContent", messageContent);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//调用Alarm
context.startActivity(in);
一、闹钟音乐播放和显示界面activity
//显示闹钟报警对话框:显示报警界面,播放报警音乐 public class Alarm extends Activity { //媒体播放器 private MediaPlayer mMediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.alarm); try { //播放指定的音乐 mMediaPlayer=MediaPlayer.create(Alarm.this,ActivityManager.getUri()); //设置播放的音量 mMediaPlayer.setVolume(300, 350); //设置循环 mMediaPlayer.setLooping(true); } catch (Exception e) { Toast.makeText(Alarm.this,"音乐文件播放异常",Toast.LENGTH_SHORT); } //开始播放 mMediaPlayer.start(); Intent intent=getIntent(); //获得标题 String messageTitle=intent.getStringExtra("messageTitle"); //获得内容 String messageContent=intent.getStringExtra("messageContent"); //新建对话框 AlertDialog.Builder adb=new Builder(Alarm.this); adb.setTitle(messageTitle); adb.setMessage(messageContent); adb.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //关闭媒体播放器 mMediaPlayer.stop(); mMediaPlayer.release(); finish(); } }); //显示对话框 adb.show(); } }
二、闹钟广播接收器
//闹钟广播接收器 public class AlarmNote extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //获得标题 String messageTitle=intent.getStringExtra("messageTitle"); //获得内容 String messageContent=intent.getStringExtra("messageContent"); //接收到广播以后,启动Alarm activity,在alarm中报警 Intent in=new Intent(); in.setClass(context, Alarm.class); in.putExtra("messageTitle", messageTitle); in.putExtra("messageContent", messageContent); in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //调用Alarm context.startActivity(in); } }
三、绑定系统的闹钟服务
//AlarmNote这个类已经在Manifest文件注册,所以通过类的方式调用这个广播时不用在注册啦 //如果通过action一定要注册 Intent intent = new Intent(); intent.setClass(this, AlarmNote.class); //传递标题和内容信息 intent.putExtra("messageTitle", name); intent.putExtra("messageContent", messageContent); //PendingIntent 待定的意图 我们可以同过它来启动其它应用的activity,service,broadcast //可以理解为Intent的封装包,相当于把startActivity、sendBroadcast封装在内了 pi = PendingIntent.getBroadcast(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); //获得闹钟服务://顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务, //在特定的时刻为我们广播一个指定的Intent。 alm = (AlarmManager) getSystemService(ALARM_SERVICE); //设置闹钟 alm.set(AlarmManager.RTC_WAKEUP, c2.getTimeInMillis(), pi);