android 简易闹钟,android简易小闹钟

实现效果:点击主活动上的按钮,弹出一个带有时间选择器的对话框(TimePickerDialog),设置时间后Toast"设置成功"。到设置的时间后在AlarmActivity弹出显示时间到的对话框。

实现原理:使用AlarmManager类向系统请求一个定时任务,到时间时系统会发送一个广播,接受这个广播并做相应的操作即可。

1.主活动代码

import android.app.Activity;

import android.app.AlarmManager;

import android.app.PendingIntent;

import android.app.TimePickerDialog;

import java.util.Calendar;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TimePicker;

import android.widget.Toast;

public class MainActivity extends Activity implements View.OnClickListener{

private Button btnSetTime;

private AlarmManager manager;

private Calendar calender;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//当前时间

calender = Calendar.getInstance();

manager = (AlarmManager) getSystemService(ALARM_SERVICE);

btnSetTime = (Button) findViewById(R.id.btnSetTime);

btnSetTime.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.btnSetTime:

showAlertDialog();

break;

}

}

private void showAlertDialog() {

TimePickerDialog dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

@Override

public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {

Calendar c = Calendar.getInstance();

c.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象

c.set(Calendar.HOUR_OF_DAY, hourOfDay); //设置闹钟小时数

c.set(Calendar.MINUTE, minute); //设置闹钟的分钟数

c.set(Calendar.SECOND, 0); //设置闹钟的秒数

c.set(Calendar.MILLISECOND, 0); //设置闹钟的毫秒数

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); //创建Intent对象

PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); //创建PendingIntent

manager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); //设置闹钟

Toast.makeText(MainActivity.this, "闹钟设置成功", Toast.LENGTH_SHORT).show();//提示用户

}

}, calender.get(Calendar.HOUR_OF_DAY), calender.get(Calendar.MINUTE),false);

dialog.show();

}

}

注意:calender是用来设置弹出框默认显示时间的,c才是我们设置的时间。这里c.set(Calendar.HOUR_OF_DAY, hourOfDay);里的参数不要错写成HOUR,HOUR是十二小时制,HOUR_OF_DAY才是24小时制。(我会说我给他加12什么的完全没用吗)。关键代码是manager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);第一个参数是闹钟的类型,第二个是执行时间,从我们设置的c获取,第三个就是要执行的任务。还有,看看Calender导的是哪个包,如果calender的代码红了基本就是导错了。

2.广播接收器:

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver {

public AlarmReceiver() {

}

@Override

public void onReceive(Context context, Intent intent) {

Intent i = new Intent(context,AlarmActivity.class);

//使用context开启Aty时要开启新的task,所以要加一个flag

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(i);

}

}注意别忘了加那个FLAG。

之后在AlarmActivity中弹出对话框就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值