安卓之闹钟

做一个自定义的闹钟,首先要得到闹钟管理者(AlarmManager),然后得到系统当前时间。
/**
* 1.弹出时间对话框
* 2.确定好选择的时间
* 3.设置好闹钟
* 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
* PendingIntent 延迟跳转 AlarmManager闹钟管理者
* Intent的组成部分:ComponementName extra Action Data Categlay(分组) Flag
*/
差不多就这么几个步骤。
闹钟可以设置一次以及多次。多次就是有一个周期(24小时响一次)。其不同之处在于:
一次:alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
多次:alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),5000, pendingIntent);
代码如下:

public class MainActivity extends AppCompatActivity {

    private AlarmManager alarmManager;
    private PendingIntent pendingIntent;
    private Button main_btn_alarm;
    private Button main_btn_alarmcycle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取闹钟管理者
        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        main_btn_alarm = (Button) findViewById(R.id.main_btn_alarm);
        main_btn_alarmcycle= (Button) findViewById(R.id.main_btn_alarmcycle);
    }
    //设置闹钟(响一次)
    public void setAlarm(View view){
        //获取当前系统时间
        Calendar c=Calendar.getInstance();
        int hour=c.get(Calendar.HOUR_OF_DAY);//小时
        int minute=c.get(Calendar.MINUTE);//分钟
        /**
         * 1.弹出时间对话框
         * 2.确定好选择的时间
         * 3.设置好闹钟
         * 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
         * PendingIntent 延迟跳转 AlarmManager闹钟管理者
         * Intent的组成部分:ComponementName extra  Action Data Categlay(分组) Flag
         */
        TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int i, int i1) {
                 //设置闹钟时间,确定时间。
                Calendar calendar=Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY,i);
                calendar.set(Calendar.MINUTE,i1);
                //时间一到,执行响应
                Intent intent=new Intent();
                intent.setAction("com.example.yang_alarm_notification.RING");
                PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);
                alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
                main_btn_alarm.setText("设置闹钟时间:"+i+"时"+i1+"分");
            }
        },hour,minute,true);
        main_btn_alarm.setText("设置闹钟(响一次)");
        timePickerDialog.show();
    }
    //设置闹钟(重复)
    public void setAlarmCycle(View view){
        //获取当前系统时间
        Calendar c=Calendar.getInstance();
        int hour=c.get(Calendar.HOUR_OF_DAY);//小时
        int minute=c.get(Calendar.MINUTE);//分钟
        /**
         * 1.弹出时间对话框
         * 2.确定好选择的时间
         * 3.设置好闹钟
         * 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
         * PendingIntent 延迟跳转 AlarmManager闹钟管理者
         * Intent的组成部分:ComponementName extra  Action Data Categlay(分组) Flag
         */
        TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int i, int i1) {
                //设置闹钟时间,确定时间。
                Calendar calendar=Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY,i);
                calendar.set(Calendar.MINUTE,i1);
                //时间一到,执行响应
                Intent intent=new Intent();
                intent.setAction("com.example.yang_alarm_notification.RING");
                pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),5000, pendingIntent);
                main_btn_alarmcycle.setText("设置闹钟时间:"+i+"时"+i1+"分");
            }
        },hour,minute,true);
        timePickerDialog.show();
    }
    //取消重复闹钟
    public void CancelAlarmCycle(View view){
        main_btn_alarmcycle.setText("设置闹钟(重复)");
        alarmManager.cancel(pendingIntent);
    }
}


我这里没有直接跳转,而是通过广播来跳转。利用Intent的Action。设置广播名字,详情请参考:http://blog.csdn.net/qq_35731570/article/details/54910216

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值