android 闹钟设置

来源:互联网 发布:oracle数据库存年份 编辑:程序博客网 时间:2024/05/28 16:20
 在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 来提示用户,代码如下: 
Java代码
  1. package com.yarin.android.Examples_07_07;

  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.widget.Toast;

  6. public class AlarmReceiver extends BroadcastReceiver {
  7.         public void onReceive(Context context, Intent intent) {
  8.                 Toast.makeText(context, "你设置的闹钟时间到了", Toast.LENGTH_LONG).show();
  9.         }
  10. }
复制代码
由于使用了 BroadcastReceiver 服务,因此需要在 AndroidManifest.xml中进行声明,代码如下: 
Xml代码 
  1. <receiver android:name=".AlarmReceiver" android:process=":remote" />
复制代码

然后就只需要对"设置闹钟"、"取消闹钟" 的事件进行监听了,代码如下: 
Java代码 
  1. package com.yarin.android.Examples_07_07;

  2. import java.util.Calendar;

  3. import android.app.Activity;
  4. import android.app.AlarmManager;
  5. import android.app.PendingIntent;
  6. import android.app.TimePickerDialog;
  7. import android.content.Intent;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.TextView;
  12. import android.widget.TimePicker;

  13. public class Activity01 extends Activity {
  14.         Button mButton1;
  15.         Button mButton2;

  16.         TextView mTextView;

  17.         Calendar calendar;

  18.         /** Called when the activity is first created. */
  19.         @Override
  20.         public void onCreate(Bundle savedInstanceState) {
  21.                 super.onCreate(savedInstanceState);

  22.                 setContentView(R.layout.main);
  23.                 calendar = Calendar.getInstance();

  24.                 mTextView = (TextView) findViewById(R.id.TextView01);
  25.                 mButton1 = (Button) findViewById(R.id.Button01);
  26.                 mButton2 = (Button) findViewById(R.id.Button02);

  27.                 mButton1.setOnClickListener(new View.OnClickListener() {
  28.                         public void onClick(View v) {
  29.                                 calendar.setTimeInMillis(System.currentTimeMillis());
  30.                                 int mHour = calendar.get(Calendar.HOUR_OF_DAY);
  31.                                 int mMinute = calendar.get(Calendar.MINUTE);
  32.                                 new TimePickerDialog(Activity01.this,
  33.                                                 new TimePickerDialog.OnTimeSetListener() {
  34.                                                         public void onTimeSet(TimePicker view,
  35.                                                                         int hourOfDay, int minute) {
  36.                                                                 calendar.setTimeInMillis(System
  37.                                                                                 .currentTimeMillis());
  38.                                                                 calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
  39.                                                                 calendar.set(Calendar.MINUTE, minute);
  40.                                                                 calendar.set(Calendar.SECOND, 0);
  41.                                                                 calendar.set(Calendar.MILLISECOND, 0);
  42.                                                                 /* 建立Intent和PendingIntent,来调用目标组件 */
  43.                                                                 Intent intent = new Intent(Activity01.this,
  44.                                                                                 AlarmReceiver.class);
  45.                                                                 PendingIntent pendingIntent = PendingIntent
  46.                                                                                 .getBroadcast(Activity01.this, 0,
  47.                                                                                                 intent, 0);
  48.                                                                 AlarmManager am;
  49.                                                                 /* 获取闹钟管理的实例 */
  50.                                                                 am = (AlarmManager) getSystemService(ALARM_SERVICE);
  51.                                                                 /* 设置闹钟 */
  52.                                                                 am.set(AlarmManager.RTC_WAKEUP, calendar
  53.                                                                                 .getTimeInMillis(), pendingIntent);
  54.                                                                 /* 设置周期闹 */
  55.                                                                 am.setRepeating(AlarmManager.RTC_WAKEUP, System
  56.                                                                                 .currentTimeMillis()
  57.                                                                                 + (10 * 1000), (24 * 60 * 60 * 1000),
  58.                                                                                 pendingIntent);
  59.                                                                 String tmpS = "设置闹钟时间为" + format(hourOfDay)
  60.                                                                                 + ":" + format(minute);
  61.                                                                 mTextView.setText(tmpS);
  62.                                                         }
  63.                                                 }, mHour, mMinute, true).show();
  64.                         }
  65.                 });

  66.                 mButton2.setOnClickListener(new View.OnClickListener() {
  67.                         public void onClick(View v) {
  68.                                 Intent intent = new Intent(Activity01.this, AlarmReceiver.class);
  69.                                 PendingIntent pendingIntent = PendingIntent.getBroadcast(
  70.                                                 Activity01.this, 0, intent, 0);
  71.                                 AlarmManager am;
  72.                                 /* 获取闹钟管理的实例 */
  73.                                 am = (AlarmManager) getSystemService(ALARM_SERVICE);
  74.                                 /* 取消 */
  75.                                 am.cancel(pendingIntent);
  76.                                 mTextView.setText("闹钟已取消!");
  77.                         }
  78.                 });
  79.         }

  80.         /* 格式化字符串(7:3->07:03) */
  81.         private String format(int x) {
  82.                 String s = "" + x;
  83.                 if (s.length() == 1)
  84.                         s = "0" + s;
  85.                 return s;
  86.         }
  87. }
0 0
原创粉丝点击