一.AlarmManager
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.
示例代码如下:
public static boolean addOrUpdateAlarmNotifycation(Context context,
int dplId, Date begbinTime, Date endTime, String dplTitle) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
String begin = format.format(begbinTime);
String end = format.format(endTime);
long serverTime = System.currentTimeMillis();
// long serverTime = System.currentTimeMillis();
long startTime = begbinTime.getTime() - 5000;
long tostartTime = startTime - serverTime;
if (tostartTime > 0) {
Intent intent = new Intent();
// intent.setClass(context, AlarmReceiver.class);
intent.setAction(ActivityUtil.INTENT_ACTION_ADD_ALARM);
String content = begin + "-" + end + " 竞猜 " + dplTitle;
intent.putExtra(ActivityUtil.INTENT_EXTRA_KEY_ALARM_RECEIVER_ID,
dplId);
intent.putExtra(
ActivityUtil.INTENT_EXTRA_KEY_ALARM_RECEIVER_CONTENT,
content);
PendingIntent sender = PendingIntent.getBroadcast(context, dplId,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startTime);
// calendar.add(Calendar.SECOND, 5);
AlarmManager alarm = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
sender);
return true;
}
return false;
}
二.NotificationManager
当用户有没有接到的电话的时候,Android顶部状态栏里就会出现一个小图标。提示用户有没有处理的快讯,当拖动状态栏时,可以查看这些快讯。Android给我们提供了NotificationManager来管理这个状态栏。可以很轻松的完成。
如果要添加一个Notification,可以按照以下几个步骤
1:获取NotificationManager:
NotificationManager m_NotificationManager=(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
2:定义一个Notification:
Notification m_Notification=new Notification();
3:设置Notification的各种属性:
//设置通知在状态栏显示的图标
m_Notification.icon=R.drawable.icon;
//当我们点击通知时显示的内容
m_Notification.tickerText="Button1 通知内容.....";
//通知时发出的默认声音
m_Notification.defaults=Notification.DEFAULT_SOUND;
//设置通知显示的参数
Intent m_Intent=new Intent(NotificationDemo.this,DesActivity.class);
PendingIntent m_PendingIntent=PendingIntent.getActivity(NotificationDemo.this, 0, m_Intent, 0);
m_Notification.setLatestEventInfo(NotificationDemo.this, "Button1", "Button1通知",m_PendingIntent );
//这个可以理解为开始执行这个通知
m_NotificationManager.notify(0,m_Notification);
4:既然可以增加同样我们也可以删除。当然是只是删除你自己增加的。
m_NotificationManager.cancel(0);
这里的0是一个ID号码,和notify第一个参数0一样。
这也就完成了,添加删除工作。
demo代码如下:
public static void HmNotification(Context context, String content, int id) {
long when = System.currentTimeMillis();
NotificationManager m = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
String title = "通知";
Notification n = new Notification();
n.when = when;
n.icon = R.drawable.ic_launcher;
n.tickerText = "通知";
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.defaults |= Notification.DEFAULT_ALL;
n.defaults |= Notification.DEFAULT_LIGHTS;
// n.defaults |= Notification.DEFAULT_SOUND;
// n.defaults |= Notification.DEFAULT_VIBRATE;
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
n.setLatestEventInfo(context, title, content, pi);
m.notify(id, n);
}
三.接受AlarmManager发送的广播
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
mContext = context;
if (ActivityUtil.INTENT_ACTION_ADD_ALARM.equals(intent.getAction())) {
int id = intent.getExtras().getInt(
ActivityUtil.INTENT_EXTRA_KEY_ALARM_RECEIVER_ID);
if (ActivityUtil.isApplicationBroughtToBackground(context)) {
AcquireWakeLock(500);
MyNotification
.HmNotification(
context,
intent.getStringExtra(ActivityUtil.INTENT_EXTRA_KEY_ALARM_RECEIVER_CONTENT),
1);
ReleaseWakeLock();
}
} else {
}
}
private PowerManager.WakeLock m_wakeLockObj = null;
public void AcquireWakeLock(long milltime) {
if (m_wakeLockObj == null) {
PowerManager pm = (PowerManager) mContext
.getSystemService(Context.POWER_SERVICE);
m_wakeLockObj = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "AlarmReceiver");
m_wakeLockObj.acquire(milltime);
}
}
public void ReleaseWakeLock() {
// 取消点亮
if (m_wakeLockObj != null && m_wakeLockObj.isHeld()) {
m_wakeLockObj.release();
m_wakeLockObj = null;
}
}