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();
}
}