Android闹钟服务详解
通常情况下我们有这样的需求,规定程序在指定的时间内启动,这样就用到了android为我们提供的闹钟服务
下面就一个简单的例子,来说明如何使用android的闹钟服务
1、首先创建布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal"> <TimePicker android:id="@+id/time" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/msg" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="当前没有设置闹钟" /> <Button android:id="@+id/set" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="设置闹钟" /> <Button android:id="@+id/delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="删除闹钟" /> </LinearLayout>
第二步:在activity中使用闹钟服务
package com.jiao.alarm;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;
public class MyAlarmManager extends Activity {
private AlarmManager alarm = null; // 闹钟管理
private Button set = null; // 按钮组件
private Button delete = null; // 按钮组件
private TextView msg = null; // 文本显示组件
private Calendar calendar = Calendar.getInstance(); // 取得Calendar对象
private TimePicker time = null; // 时间选择器
private int hourOfDay = 0; // 保存设置的时
private int minute = 0; // 保存设置的分
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main); // 调用布局管理器
time = (TimePicker) super.findViewById(R.id.time); // 取得时间选择器
set = (Button) super.findViewById(R.id.set); // 取得按钮组件
delete = (Button) super.findViewById(R.id.delete); // 取得按钮组件
msg = (TextView) super.findViewById(R.id.msg); // 取得组件
set.setOnClickListener(new SetOnClickListenerImpl()); // 设置单击事件
delete.setOnClickListener(new DeleteOnClickListenerImpl()); // 设置单击事件
alarm = (AlarmManager) super.getSystemService(Context.ALARM_SERVICE); // 取得闹钟服务
time.setOnTimeChangedListener(new OnTimeChangedListenerImpl()); // 设置时间改变监听
time.setIs24HourView(true); // 24小时制
}
private class OnTimeChangedListenerImpl implements OnTimeChangedListener {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
calendar.setTimeInMillis(System.currentTimeMillis()); // 设置当前时间
calendar.set(Calendar.HOUR_OF_DAY,hourOfDay); // 设置小时
calendar.set(Calendar.MINUTE, minute); // 设置分钟
calendar.set(Calendar.SECOND, 0); // 设置秒
calendar.set(Calendar.MILLISECOND, 0); // 设置毫秒
hourOfDay = hourOfDay; // 保存设置的小时
minute = minute; // 保存设置的分钟
}
}
private class SetOnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View view) {
Intent intent = new Intent(MyAlarmManager.this,MyAlarmReceiver.class); // 指定跳转的Intent
intent.setAction("com.jiao.action.setalarm"); // 定义广播的Action
PendingIntent sender = PendingIntent.getBroadcast(MyAlarmManager.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); // 指定PendingIntent
alarm.set(AlarmManager.RTC_WAKEUP,MyAlarmManager.this.calendar.getTimeInMillis(), sender); // 设置闹钟
msg.setText("闹钟响起的时间是:"+ hourOfDay + "时"+ minute + "分。"); // 提示文字
Toast.makeText(MyAlarmManager.this, "闹钟设置成功!",Toast.LENGTH_SHORT).show(); // 显示提示信息
}
}
private class DeleteOnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View view) {
if (alarm != null) {
Intent intent = new Intent(MyAlarmManager.this,MyAlarmReceiver.class);// 设置Intent
PendingIntent sender = PendingIntent.getBroadcast(MyAlarmManager.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); // 指定PendingIntent
alarm.cancel(sender); // 取消闹钟
msg.setText("当前没有设置闹钟。"); // 提示文字
Toast.makeText(MyAlarmManager.this, "闹钟删除成功!",Toast.LENGTH_SHORT).show(); // 显示提示信息
}
}
}
}
第三步:在上一步的代码中自定义了一个广播接收者,所以再创建一个广播接收者
package com.jiao.alarm;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent it = new Intent(context, AlarmMessage.class);// 定义要操作的Intent,要转到的activity在这里设置就可以了
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 传递一个新的任务标记
context.startActivity(it); // 启动Intent
}
}
最后记得在清单文件中配置,注册广播接收者
<receiver android:name="MyAlarmReceiver" android:enabled="true" android:process=":remote"> <intent-filter> <action android:name="com.jiao.action.setalarm" /> </intent-filter> </receiver>

浙公网安备 33010602011771号