AlarmManager
AlarmManager
huiyun-yoyo 发表于1年前
AlarmManager
  • 发表于 1年前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

/AlarmManager称呼为全局定时器 //AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service. // //android提供了四种类型的闹钟: //ELAPSED_REALTIME在指定的延时过后,发送广播,但不唤醒设备。 //ELAPSED_REALTIME_WAKEUP在指定的演示后,发送广播,并唤醒设备 //RTC在指定的时刻,发送广播,但不唤醒设备 //RTC_WAKEUP在指定的时刻,发送广播,并唤醒设备 // //AlarmManager提供的方法: //void set(int type, long triggerAtTime, PendingIntent operation)设置一个闹钟 //void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)设置一个会重复的闹钟 //void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) //设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。 //void cancel(PendingIntent operation)取消一个设置的闹钟 //void setTimeZone(String timeZone) //设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限 // //setRepeating方法有4个参数,这些参数的含义如下: //type:表示警报类型,一般可以取的值是AlarmManager.RTC和AlarmManager.RTC_WAKEUP。 //如果将type参数值设为AlarmManager.RTC,表示是一个正常的定时器,如果将type参数值设为AlarmManager.RTC_WAKEUP, //除了有定时器的功能外,还会发出警报声(例如,响铃、震动)。 //triggerAtTime:第1次运行时要等待的时间,也就是执行延迟时间,单位是毫秒。 //interval:表示执行的时间间隔,单位是毫秒。 //operation:一个PendingIntent对象,表示到时间后要执行的操作。PendingIntent与Intent类 //似,可以封装Activity、BroadcastReceiver和Service。但与Intent不同的是,PendingIntent可以脱离应用程序而存在。 // //calendar.getTimeInMillis()返回从格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000到Calendar对象表示的时间之间的毫秒数

import java.util.Calendar;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TimeTask extends Activity {
private Calendar calendar;
private AlarmManager am;
private PendingIntent pendingIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

    calendar = Calendar.getInstance();  

    calendar.setTimeInMillis(System.currentTimeMillis());  
    //set(f, value) changes field f to value. 设置监听时间的时分秒  
    int hourOfDay = 23,minute = 59;  
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);  
    calendar.set(Calendar.SECOND, 0);  
    calendar.set(Calendar.MILLISECOND, 0);  
    Intent intent = new Intent("com.buscall.alarm");  
    intent.putExtra("time", calendar.getTimeInMillis());  
    pendingIntent = PendingIntent.getBroadcast(TimeTask.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);  
    //获取系统进程  
    am = (AlarmManager)getSystemService(ALARM_SERVICE);  
    am.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);  
    //设置周期!!  
    am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), (24*60*60*1000), pendingIntent);  
    String tmps = "设置闹钟时间为:"+format(hourOfDay)+":"+format(minute);  
    System.out.println(tmps);  
    IntentFilter filter = new IntentFilter();  
    filter.addAction("com.buscall.alarm");  
    registerReceiver(TimeReceiver, filter);  
}  
@Override  
protected void onDestroy() {  
    am.cancel(pendingIntent);  
    unregisterReceiver(TimeReceiver);  
    super.onDestroy();  
}  
private BroadcastReceiver TimeReceiver = new BroadcastReceiver() {  
    @Override  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if (action.equals("com.buscall.alarm")||action=="com.buscall.alarm") {  
            System.out.println("到时间了:"+getIntent().getStringExtra("time"));  
        }  
    }  
};  
/**8:8 format 08:08*/  
private String format(int x) {  
    String s = ""+x;  
    if(s.length() == 1)  
        s = "0"+s;  
    return s;  
}  

}

标签: 精准定时器
共有 人打赏支持
粉丝 1
博文 42
码字总数 33793
×
huiyun-yoyo
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: