阅读背景:

[控件]AlarmManager全局定时器

来源:互联网 
package alarm.clock;

import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TimePicker;

public class mainActivity extends Activity implements OnClickListener {
    Button btnset;
    Calendar calendar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnset = (Button) findViewById(R.id.btnset);
        btnset.setOnClickListener(this);
        // 获得Calendar的实例Calendar不能new 创建
        calendar = Calendar.getInstance();
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.btnset:
                showDialog(0);
                break;
        }
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        Dialog d = null;
        switch(id) {
            case 0:
                d = new TimePickerDialog(mainActivity.this,
                        new OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view,
                                    int hourOfDay, int minute) {
                                Intent intent = new Intent(mainActivity.this,
                                        alarm.class);
                                PendingIntent pendingIntent = PendingIntent
                                        .getBroadcast(mainActivity.this, 0,
                                                intent, 0);
                                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);
                                // 获得实例
                                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                                // public static final int ELAPSED_REALTIME
                                //
                                // 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。
                                //
                                // public static final int
                                // ELAPSED_REALTIME_WAKEUP
                                // 能唤醒系统,用法同ELAPSED_REALTIME
                                //
                                // public static final int RTC
                                // 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用
                                // System.currentTimeMillis()获得。
                                //
                                // public static final int RTC_WAKEUP
                                // 能唤醒系统,用法同RTC类型
                                // 如果使用ELAPSED_REALTIME_WAKEUP类型
                                // 应该调用SystemClock.elapsedRealtime()获取相对时间在加上你设定的延迟时间
                                //
                                // alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                                // SystemClock.elapsedRealtime()+5000, sender);
                                // 如果使用RTC_WAKEUP类型
                                // 应该调用System.currentTimeMillis()获取从1970.1.1号以来的时间在加上你设定的延迟时间
                                //
                                // alarmManager.set(AlarmManager.RTC_WAKEUP,
                                // System.currentTimeMillis()+5000, sender);

                                // 设置闹钟 一次性的
                                am.set(AlarmManager.RTC_WAKEUP,
                                        calendar.getTimeInMillis(),
                                        pendingIntent);

                                // 设置周期闹钟
                                am.setRepeating(AlarmManager.RTC_WAKEUP,
                                        System.currentTimeMillis()
                                                + (10 * 1000),
                                        (24 * 60 * 60 * 1000), pendingIntent);
                                // 取消闹钟
                                // 取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager
                                // am.cancel(pendingIntent);
                            }
                        }, 0, 0, true);
                break;
        }
        return d;
    }
}package alarm.clock;

import java.util.Calendar



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: