Android 之AlarmManager应用

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>

最后运行就可以实现定时发送广播的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值