概述:简单闹钟的实现

  • 通过点击按钮弹出日期时间对话框,选择日期时间并确定,会自动保存。当设置的时间一到就弹出一个新的Activity界面并弹出AlerDialog对话框播放系统闹钟声音。最后实现AlerDialog的取消与跳转。

主页面布局:activity.main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="邱万勇的闹钟" /><Buttonandroid:id="@+id/btnCalinder"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="设置时间" /></LinearLayout>

MainActivity 的实现

public class MainActivity extends Activity {private Button btn;TextView tv;AlertDialog builder = null;Calendar c = Calendar.getInstance();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);c.get(Calendar.YEAR);c.get(Calendar.MONTH);c.get(Calendar.DAY_OF_MONTH);btn = (Button) findViewById(R.id.btnCalinder);tv = (TextView) findViewById(R.id.tv);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {setAlarmDate();}});}/*** 设置日期* */private void setAlarmDate() {final Calendar currentDate = Calendar.getInstance();DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, monthOfYear);c.set(Calendar.DAY_OF_MONTH, dayOfMonth);setAlarmTime(year,monthOfYear,dayOfMonth);}}, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH),currentDate.get(Calendar.DAY_OF_MONTH));datePickerDialog.show();}/*** 设置闹铃时间* */private void setAlarmTime(final int year,final int monthOfYear, final int dayOfMonth) {Calendar currentTime = Calendar.getInstance();// 创建一个TimePickerDialog实例,并把它显示出来。new TimePickerDialog(MainActivity.this, 0, // 绑定监听器new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker tp, int hourOfDay,int minute) {// 指定启动AlarmActivity组件Intent intent = new Intent();intent.setAction("com.westsoft.alarmtime.ACTION");// Activity// 创建PendingIntent对象PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);Log.i("TimeInMillis", "TimeInMillis_1"+c.getTimeInMillis()+"");// 根据用户选择时间来设置Calendar对象c.set(Calendar.HOUR_OF_DAY, hourOfDay);c.set(Calendar.MINUTE, minute);String longTime=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" "+hourOfDay+ ":" + minute;//2016-10-25 10:44:53tv.setText(longTime);// 设置AlarmManager将在Calendar对应的时间启动指定组件// 设置闹钟,当前时间就唤醒AlarmManager alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi);Log.i("TimeInMillis", c.getTimeInMillis()+"");// 显示闹铃设置成功的提示信息Toast.makeText(MainActivity.this, "闹铃设置成功啦",Toast.LENGTH_SHORT).show();}}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime.get(Calendar.MINUTE), true).show();}
}

闹钟Activity界面CallAlarm

public class CallAlarm extends Activity implements OnClickListener {public static CallAlarm context = null;private MediaPlayer player = new MediaPlayer();WakeLock mWakelock;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_welcome);// 需要在AndroidManifest里面设置权限,唤醒屏幕PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP| PowerManager.FULL_WAKE_LOCK, "AlertDialog");mWakelock.acquire();// 屏幕解锁,需要设置权限KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("AlertDialog");keyguardLock.disableKeyguard();context = this;try {Uri localUri = RingtoneManager.getActualDefaultRingtoneUri(context,RingtoneManager.TYPE_ALARM);if ((player != null) && (localUri != null)) {player.setDataSource(context, localUri);player.prepare();player.setLooping(false);player.start();}AlertDialog.Builder localBuilder = new AlertDialog.Builder(context);localBuilder.setTitle("计划提醒通知来啦~");localBuilder.setMessage(getIntent().getStringExtra("content"));localBuilder.setPositiveButton("查看", this);localBuilder.setNegativeButton("忽略", this);localBuilder.show();} catch (IllegalArgumentException localIllegalArgumentException) {localIllegalArgumentException.printStackTrace();} catch (SecurityException localSecurityException) {localSecurityException.printStackTrace();} catch (IllegalStateException localIllegalStateException) {localIllegalStateException.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case DialogInterface.BUTTON1: {Intent intent = new Intent(CallAlarm.this, MainActivity.class);startActivity(intent); // 启动转到的Activityfinish();}case DialogInterface.BUTTON2: {// mWakelock.release();player.stop();finish();}}}
}

参考demo请点击连接下载:下载本文参考demo

Android闹钟开发相关推荐

  1. android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...

    Android 定时执行任务 AlarmManager的使用(可用于闹钟开发) 2011年7月13日加注:所有的定时任务在手机重启后会消失,如果需要重启后继续用,可以加个开机自启,然后重新设置. Al ...

  2. Android自定义定时闹钟开发详解

    这篇文章主要为大家详细介绍了Android自定义定时闹钟开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Android开发之自定义闹钟实现,供大 ...

  3. 【Android 应用开发】对Android体系结构的理解--后续会补充

    1.最底层_硬件 任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件. 2.Linux内核层 该层主要对硬件 ...

  4. Android应用开发-快速入门

    内容摘要 了解Android 操作系统 搭建Android 开发工具 使用Android 模拟器 案例-电话拨号器/短信发送器 掌握点击事件的四种实现方式 掌握Android 常见布局 了解Andro ...

  5. ANDROID物联网开发从入门到实战附源码

    本书从获取源码和搭建应用开发环境开始讲起,依次讲解了基础知识篇.数据传输篇.信息识别篇.传感器应用篇和技术提高篇这 5大部分内容. 目录 第1篇 基础知识篇 第1章 Android系统介绍 2 1.1 ...

  6. 《 Android物联网开发从入门到实战》

    今天小编分享的这本书是国内第一本Android物联网开发书籍,由42个全真实战案例,环环相扣,深入解析Android物联网开发. <Android物联网开发从入门到实战>内容分为 5篇,共 ...

  7. Google Android SDK开发范例大全

    1. 图书信息: Google Android SDK开发范例大全(第2版)     人民邮电出版社 2010-6-1 0:00:00 余志龙;陈昱勋;郑名杰;陈小凤;郭秩均 79 元 ISBN:97 ...

  8. android闹钟 推迟功能,Android闹钟事件被延迟

    我开发了我的 android闹钟应用程序,每小时需要一些东西(如下午1点,下午2点,下午3点,下午4点,下午5点,下午6点等). 现在我正在使用alarmManager,这样我每小时都会收到一次bro ...

  9. 湖南某科技大学 安卓Android移动开发基础期中考试笔记(持续更新)

    湖南某科技大学 安卓Android移动开发基础期中考试笔记 前言 建议大家把第三章的三个实战演练和本笔记的所有代码部分都在AS中手打一遍,手打的意思是看懂之后自己写出来,而不是照着抄.这不90分就到手 ...

最新文章

  1. java 坦克重叠_坦克大战中坦克一直有重叠是怎么回事
  2. 项目: 用数组实现反弹球消砖块
  3. 木马编程DIY (Delphi版) - 第2篇 单实例运行
  4. mysql 字段有正负值的时候 sum无效_京东金融数据分析:MySQL+HIVE的结合应用案例详解...
  5. 串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版
  6. Linux下不同颜色文件的类型
  7. 零基础在Linux环境安装Cadence系列软件
  8. c# winform人脸识别
  9. win10商店的应用下载移植 注:.appx文件最好在win10使用 附win10商店UWP的安装包
  10. vue 图片加载完成事件
  11. 1525C - Robot Collisions
  12. Loj #3124. 「CTS2019 | CTSC2019」氪金手游
  13. 《禅与摩托车维修艺术》摘录(一)
  14. Zynq-7000 AMP运行模式下的软件切换及多版本固化运行
  15. iba测评题目_靠谱测评丨6国12款大牌纯牛奶盲测,谁最好喝?结果万万没想到
  16. 虚引用(PhantomReference)
  17. 检测设备摄像头、指南针、录音、陀…
  18. “151秒识别128万张ImageNet图像”背后,腾讯告别技术赛马
  19. numpy.random.rand(),numpy.random.randn(),numpy.random.normal()函数介绍和示例
  20. Simulink 双馈风力发电机并网控制系统

热门文章

  1. 纳滤膜组件帮你揪出水中隐藏的健康元凶——重金属
  2. 医疗是否移得动?信息移动是关键
  3. linux go服务器吗,Linux之CentOS上部署安装goproxy服务端
  4. 共享停车位小程序,微信小程序停车场车位,微信小程序停车场系统毕设作品
  5. 如何安装和设置Strawberry Perl
  6. 刷题第45, 46天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数、139.单词拆分
  7. Eigen库QR分解
  8. 免费的高效视频会议系统 你也可以拥有
  9. Android FlowLayout 流式布局
  10. 1024 这天我成功拿到舞蹈厂 offer, 涨薪 50%