Alarm就是我们通常说的闹钟,其实,在Android中实现一个简单的闹钟功能并不是很难,原理就是在特定的事件广播一个Intent,然后系统收到这个广播以后,做出一个反应( Receive)。在Android中提供了四种类型的闹钟,分别是ELAPSED_REALTIME(在指定的延时后广播通知,不唤醒设备)、ELAPSED_REALTIME_WAKEUP(在指定的延时后广播通知,唤醒设备)、 RTC (在指定的时刻发送通知,不唤醒设备)、RTC_WAKEUP( 在指定的时刻发送通知,不唤醒设备)。在Android中实现闹钟最主要的几个方法是:
void set(int type, long triggerAtTime, PendingIntent operation)
设置一个闹钟
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
设置一个会重复的闹钟
void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
设置一个重复闹钟的不精确版本
内置的几个interval为: INTERVAL_FIFTEEN_MINUTES 、INTERVAL_HALF_HOUR、INTERVAL_HOUR、 INTERVAL_HALF_DAY、 INTERVAL_DAY
void cancel(PendingIntent operation)
取消一个闹钟
代码实现片段:
am=(AlarmManager)getSystemService(ALARM_SERVICE);
Intent intent=new Intent();
intent.setAction("com.Android.AlarmManager.action.BACK_ACTION");
intent.putExtra("Message", "学习编程累了,该休息一下啦");
pi=PendingIntent.getBroadcast(MainActivity.this, 0, intent,0);
BtnOpen=(Button)findViewById(R.id.BtnOpen);
BtnOpen.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
//立即提醒
am.set(AlarmManager.RTC, System.currentTimeMillis(), pi);
//每隔一分钟提醒
//am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10000, pi);
}
});
这样我们就实现了发送广播的过程,下面我们再来说接收的事情。
我们首先继承BroadcastReceiver实现一个用以接收发出去的广播的类Receiver。
public class Receiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, intent.getStringExtra("Message"), Toast.LENGTH_SHORT).show();
}
}
然后在AndroidMainifest.xml中的application节点中加入下面的内容,完成Receiver的注册
<receiver android:name="Receiver" android:permission="com.android.alarm.permission.SET_ALARM">
<intent-filter>
<action android:name="com.Android.AlarmManager.action.BACK_ACTION"/>
</intent-filter>
</receiver>