定义闹钟单独响起和重复响起

1.定义主页面

package com.example.zhujunxian.zhujunxian;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.text.Format;
import java.util.Calendar;

public class EX01_07three extends Activity {
    TextView setTime1;
    TextView setTime2;
    Button mButton1;
    Button mButton2;
    Button mButton3;
    Button mButton4;
    //默认当前日期
    Calendar c = Calendar.getInstance();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ex01_07three);

        setTime1 = (TextView) findViewById(R.id.setTime1);
        mButton1 = (Button) findViewById(R.id.mbutton1);
        mButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //System.currentTimeMillis() 获得的是自1970-1-01 00:00:00.000
                // 到当前时刻的时间距离,类型为long
                c.setTimeInMillis(System.currentTimeMillis());
                //获取你选定闹钟的小时和分钟
                int mHour = c.get(Calendar.HOUR_OF_DAY);
                int mMinute = c.get(Calendar.MINUTE);
                new TimePickerDialog(EX01_07three.this,
                        new TimePickerDialog.OnTimeSetListener(){
                            public void onTimeSet(TimePicker view, int hourOfDay,
                                                  int minute) {
                                //获取定闹钟时候选中的时间;
                                c.setTimeInMillis(System.currentTimeMillis());
                                c.set(Calendar.HOUR_OF_DAY, hourOfDay);
                                c.set(Calendar.MINUTE, minute);
                                c.set(Calendar.SECOND, 0);
                                c.set(Calendar.MILLISECOND, 0);
                                //跳转Activity
                                //Log.i("zhujunxiana","Time"+c.getTimeInMillis());
                                Intent intent = new Intent(EX01_07three.this, CallAlarm.class);
                                //PendingIntent可以理解成延时执行Intent、
                                PendingIntent sender = PendingIntent.getBroadcast(
                                        EX01_07three.this, 0, intent, 0);
                                //在特定的时刻为我们广播一个指定的Intent。
                                // 简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent。
                                AlarmManager am;
                                am = (AlarmManager) getSystemService(ALARM_SERVICE);
                                //设置api
                                am.setExact(AlarmManager.RTC_WAKEUP,
                                        c.getTimeInMillis(),
                                        sender
                                );
                                String tmpS = format(hourOfDay) + ":" + format(minute);
                                setTime1.setText(tmpS);
                                Toast.makeText(EX01_07three.this, "设置闹钟时间为" + tmpS,
                                        Toast.LENGTH_SHORT)
                                        .show();
                            }
                        }, mHour, mMinute, true).show();
            }
        });
        //删除闹钟
        mButton2 = (Button) findViewById(R.id.mbutton2);
        mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(EX01_07three.this, CallAlarm.class);
                //可以理解延时执行Intent
                PendingIntent sender = PendingIntent.getBroadcast(EX01_07three.this, 0, intent, 0);

                AlarmManager am;
                am = (AlarmManager) getSystemService(ALARM_SERVICE);
                //cancel 取消设置api
                am.cancel(sender);

                Toast.makeText(EX01_07three.this, "闹钟时间解除", Toast.LENGTH_SHORT).show();
                setTime1.setText("目前无设置");
            }
        });
        //设置重复闹钟
        setTime2 = (TextView) findViewById(R.id.setTime2);
        LayoutInflater factory = LayoutInflater.from(this);
        //加载每个item的对象,这个item标记了一个布局文件,
        //想要实例化布局文件里面的东西,必须在查找id的前面加上setView
        final View setView = factory.inflate(R.layout.timeset, null);
        final TimePicker tPicker = (TimePicker) setView.findViewById(R.id.tPicker);
        tPicker.setIs24HourView(true);
        //弹出框
        final AlertDialog di = new AlertDialog.Builder(EX01_07three.this)
                .setIcon(R.drawable.a)
                .setTitle("设置")
                .setView(setView)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        EditText ed = (EditText)setView.findViewById(R.id.mEdit);
                        Log.i("zhujunxiana","testone");
                        //输入框里面的是秒,在此要转化成毫秒
                        int times = Integer.parseInt(ed.getText().toString()) * 1000;
                        Log.i("zhujunxiana","testtwo");
                        //获取你设置的时间
                        c.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
                        c.setTimeInMillis(System.currentTimeMillis());
                        c.set(Calendar.MINUTE, tPicker.getCurrentMinute());
                        c.set(Calendar.SECOND, 0);
                        c.set(Calendar.MILLISECOND, 0);
                        Log.i("zhujunxian","testthree");
                        //跳转Activity
                        Intent intent = new Intent(EX01_07three.this, CallAlarm.class);
                        //可以理解为延时操作intent/延时到当前时间
                        PendingIntent sender = PendingIntent.getBroadcast(EX01_07three.this, 1, intent, 0);
                        AlarmManager am;
                        am = (AlarmManager) getSystemService(ALARM_SERVICE);
                        //闹钟重复响起的方法、第三个查参数为重复响起的时间.
                        am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), times, sender);

                        String tmpS = format(tPicker.getCurrentHour()) + ":" + format(tPicker.getCurrentMinute());
                        setTime2.setText("设置闹钟时间" + tmpS + "开始,重复间隔为" + times / 1000 + "秒");
                        Toast.makeText(EX01_07three.this, "设置闹钟时间" + tmpS + "开始,重复间隔为" + times / 1000 + "秒", Toast.LENGTH_SHORT).show();
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                }).create();
        mButton3 = (Button) findViewById(R.id.mbutton3);
        mButton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                c.setTimeInMillis(System.currentTimeMillis());
                tPicker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
                tPicker.setCurrentMinute(c.get(Calendar.MINUTE));
                di.show();
            }
        });
        mButton4 = (Button) findViewById(R.id.mbutton4);
        mButton4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(EX01_07three.this, CallAlarm.class);
                PendingIntent sender = PendingIntent.getBroadcast(EX01_07three.this, 1, intent, 0);
                AlarmManager am;
                am = (AlarmManager) getSystemService(ALARM_SERVICE);
                //解除api
                am.cancel(sender);
                Toast.makeText(EX01_07three.this, "闹钟时间解除", Toast.LENGTH_SHORT).show();
                setTime2.setText("目前无设置");
            }
        });
    }

    //这是判断小时和分钟是不是个位数,如果是个位数的话,前面就加上一个零
    private String format(int x) {
        String s = "" + x;
        if (s.length() == 1)
            s = "0" + s;
        return s;
    }
}

定义一个广播接收器,在相应的时间发送广播

package com.example.zhujunxian.zhujunxian;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

//广播接受类
public class CallAlarm extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //从当前Activity跳转到另一个activity
        Log.i("zhujunxiana", "test");
        Intent i = new Intent(context, AlarmAlert.class);
        Bundle bundleRet = new Bundle();
        bundleRet.putString("STR_CALLER", "");
        i.putExtras(bundleRet);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }

}

定义弹出框

package com.example.zhujunxian.zhujunxian;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class AlarmAlert extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        new AlertDialog.Builder(AlarmAlert.this)
                .setIcon(R.drawable.a)
                .setTitle("闹钟响了")
                .setMessage("赶快起床吧")
                .setPositiveButton("关了它",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                AlarmAlert.this.finish();
                            }
                        }).show();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值