本片文章主要介绍闹钟的管理,使用到了BroadcastReceiver。
1.在主界面上放置两个按钮,一个用于设置闹钟,一个用于取消闹钟。
2.自定义BroadcastReceiver用于响应闹钟时间到后的触发事件。
public class MyReceiver extends BroadcastReceiver {
private Vibrator mVibrator;
@Override
public void onReceive(Context context, Intent intent) {
mVibrator = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
mVibrator.vibrate(new long[]{100,2000,1000,1000}, -1);
Toast.makeText(context, "闹钟时间到了!", Toast.LENGTH_LONG).show();
}
}
3.在AndroidManifest.xml文件中注册MyReceiver,并添加震动权限。
<receiver android:name="com.example.alarmtest.MyReceiver"></receiver>
<uses-permission android:name="android.permission.VIBRATE"/>
4.MainActivity.java文件中定义事件
设置闹钟
private void setAlarm() {
//取得系统时间作为TimePicker的默认时间
mCalendar.setTimeInMillis(System.currentTimeMillis());
int mHour = mCalendar.get(Calendar.HOUR_OF_DAY);
int mMinute = mCalendar.get(Calendar.MINUTE);
new TimePickerDialog(this, listener, mHour, mMinute, true).show();
}
取消闹钟
private void cancelAlarm() {
Intent intent = new Intent(MainActivity.this,MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
am.cancel(pi);
Toast.makeText(MainActivity.this, "闹钟已取消!", Toast.LENGTH_SHORT).show();
}
private OnTimeSetListener listener = new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
mCalendar.set(Calendar.MINUTE, minute);
mCalendar.set(Calendar.SECOND, 0);
Intent intent = new Intent(MainActivity.this,MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi);
String temp = format(hourOfDay) + ": " + format(minute);
Toast.makeText(MainActivity.this, "闹钟时间为:" + temp, Toast.LENGTH_SHORT).show();
}
};