现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现。AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服务。AlarmManager对象一般不直接实例化,而是通过Context.getsystemservice(Context.ALARM_SERVICE)方法获得。

下面是我们运用之前用到的TimePickerDialog结合AlarmManager,实现一个可以设定任意时间而且可以重复的闹钟,演示效果如下(大概每晚23:48会有闹钟通知):

layout中activity_main.xml布局文件代码:

<?xml version="1.0" encoding="utf-8"?>            

AndroidMainfest.xml配置文件(添加自定义重复闹铃receiver):

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                

RepeatAlarmReceiver.java广播接收文件:

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class RepeatAlarmReceiver extends BroadcastReceiver {    public RepeatAlarmReceiver() {    }    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "重复闹钟", Toast.LENGTH_SHORT).show();    }}

MainActivity.java代码实现:

import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Intent;import android.provider.Settings;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import android.widget.TimePicker;import java.util.Calendar;public class MainActivity extends AppCompatActivity {    AlarmManager alarmManagerSet;    PendingIntent pendingIntentSet;    int myHour,myMinute;//声明响铃时间    int intervalHour,intervalMinute,intervalSecond;//声明间隔时间(响铃周期)    Calendar calendar;//声明日历    TextView time_tv,time_tv2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);alarmManagerSet= (AlarmManager) getSystemService(ALARM_SERVICE);//设置声明时间格式        calendar = Calendar.getInstance();        myHour=calendar.get(Calendar.HOUR_OF_DAY);        myMinute=calendar.get(Calendar.MINUTE);        intervalHour=calendar.get(Calendar.HOUR_OF_DAY);        intervalMinute=calendar.get(Calendar.MINUTE);//获取时间设置的TextView        time_tv= (TextView) findViewById(R.id.time_tv);        time_tv2= (TextView) findViewById(R.id.time_tv2);    }//使用timePickerDialog设置闹铃响铃时间    public void setTime(View view){        TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {            @Override            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                myHour=hourOfDay;                myMinute=minute;                time_tv.setText(myHour+":"+myMinute);            }        },myHour,myMinute,true);        timePickerDialog.show();    }//使用timePickerDialog设置闹铃响铃周期(间隔)    public void setIntervalTime(View view){        TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {            @Override            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                intervalHour=hourOfDay;                intervalMinute=minute;                time_tv2.setText(intervalHour+":"+intervalMinute);            }        },intervalHour,intervalMinute,true);        timePickerDialog.show();    }    public void open(View view){//分别获取闹铃响铃时间以及闹铃间隔时间(用冒号分割存储于数组中)        String[] triggerTime=time_tv.getText().toString().split(":"); String[] intervalTime=time_tv2.getText().toString().split(":");//通过Calendar分别获取对应的小时和分钟(需要将String转换为int)        Calendar calendar1 = Calendar.getInstance();        calendar1.set(Calendar.HOUR_OF_DAY,Integer.parseInt(triggerTime[0]));calendar1.set(Calendar.MINUTE,Integer.parseInt(triggerTime[1]));//得到点击触发的毫秒值(即闹钟提醒时间)        long triggerAtMillis= calendar1.getTimeInMillis();        //设定pendinngIntent接受自定义闹铃广播pendingIntentSet = PendingIntent.getBroadcast(this,0,new Intent("repeatAlarm"),0);//判断如果当前系统时间大于设置的闹铃时间,则在第二天开始启用该闹铃if(System.currentTimeMillis()>triggerAtMillis){            triggerAtMillis=triggerAtMillis+24*60*60*1000;        }//使用.setRepeating设置重复闹铃        alarmManagerSet.setRepeating(AlarmManager.RTC_WAKEUP,triggerAtMillis,intervalMillis,pendingIntentSet);    }    public void stop(View v){        alarmManagerSet.cancel(pendingIntentSet);    }}





更多相关文章

  1. AndroRat-Android木马使用教程
  2. android 关机闹钟
  3. Android性能优化(一)App启动原理分析及启动时间优化
  4. Android按两次提示退出应用
  5. 【转】Android(安卓)APP性能及专项测试(个人整理)
  6. Android(安卓)4.1 - 如何使用systrace做性能分析
  7. 是时候抛弃Eclipse转向Intellij了
  8. [置顶] android 自定义Toast,可设定显示时间
  9. android计时器chronometer的基本使用

随机推荐

  1. 实现PHP微信红包API接口
  2. PHP连接MySQL数据库操作实现
  3. 掌握php短信接口代码
  4. 掌握PHP语言对接抖音快手小红书视频/图片
  5. PHP+MySql实现简单的留言板功能
  6. 阿里云PHP SMS短信服务验证码发送方法详
  7. 直击php中static,const与define的使用区
  8. 详解php版阿里云OSS图片上传类
  9. 全栈工程师看过来!PHP Javascript语法对照
  10. php array_combine()函数实例详解