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中弹出对话框就可以了。


你可能感兴趣的:(android简易小闹钟)