手机闹铃是生活中不可缺少的重要工具,闹铃功能俨然成为手机的标准配备,直接使用手机当做闹铃的人越来越多。
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{
@Override
public 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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*设置一次性闹铃*/
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public 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() {
@Override
public 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() {
@Override
public 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() {
@Override
public 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);
}
});
}
@Override
public 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;
}
}