AlarmManager (闹钟管理器)
在 Android 中,很多时候会想要定时操作,例如,晚上9点把xxx文件自动上传,早上x点响铃,x点发送通知…………
这些操作 AlarmManager 可以帮助我们实现
下面,做了一个定时通知的demo来运用AlarmManager类:
先来点图片:
获得AlarmManager的方法
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
在Activity中获取AlarmManager,并设置触发时间
通过设置时间,设置好的时间发送一条通知
private AlarmManager alarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
}
/**
* 设置定时通知发送
* @param view
*/
public void setNotification(View view){
//获取系统时间
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
//弹出时间对话框
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
//设置时间
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
Intent intent = new Intent();
intent.setAction("com.alei.alarm.SEND_NOTIFICATION");
//(发送广播)
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0x101, intent, 0);
//时间一到,发送广播
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
// //广播接受者,跳转activity
}
}, hour, minute, true);
timePickerDialog.show();
}
在sendNotificationRecevied中执行发送通知的动作
package com.alei.alarm.recevied;
import com.alei.alarm.MainActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
public class SendNotificationRecevied extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
if ("com.alei.alarm.SEND_NOTIFICATION".equals(arg1.getAction())) {
NotificationManager notificationManager = (NotificationManager) arg0.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder=new NotificationCompat.Builder(arg0);
builder.setContentTitle("新闻"); //设置通知标题
builder.setContentText("This is a Notification"); //设置通知文本
builder.setAutoCancel(true); //设置自动取消
builder.setDefaults(Notification.DEFAULT_ALL); //设置默认的通知类型
builder.setSmallIcon(android.R.drawable.ic_media_play);//设置通知图标
builder.setContentIntent(PendingIntent.getActivity(arg0,0x102,new Intent(arg0,MainActivity.class),0));
Notification notification = builder.build();
notificationManager.notify(0x101, notification);
}
}
}
记得在AndroidManiFest中注册广播
</receiver>
<receiver android:name="com.alei.alarm.recevied.SendNotificationRecevied">
<intent-filter >
<action android:name="com.alei.alarm.SEND_NOTIFICATION"/>
</intent-filter>
</receiver>
最后运行就可以实现定时发送广播的操作