概述:简单闹钟的实现

  • 通过点击按钮弹出日期时间对话框,选择日期时间并确定,会自动保存。当设置的时间一到就弹出一个新的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. php云点播源码,乐视云直播 点播服务端api
  2. python网站框架下载_最受欢迎的7款Python开源框架总结,忍不住收藏了~
  3. 总结30个CSS3选择器(转载)
  4. python编程函数_python函数式编程
  5. QC1.0、QC2.0、QC3.0、QC4.0协议介绍
  6. RDA5820收音机芯片驱动
  7. vcf文件格式详细解释
  8. ROS创建KDL tree
  9. 用简单的图来解释人工神经网络(三)——BP神经网络
  10. 无线网卡芯片类型及与linux-wlan-ng的兼容性
  11. java生成指定范围的随机数(太屌了)
  12. 微信小程序图片轮播+预览效果实现
  13. mysql8.0.20忘记密码_mysql8.0版本忘记密码修改密码
  14. 信道容量的数值解法(非对称信道)
  15. ZblogPHP度娘主题新增图片列表页面模版
  16. 【工具】批量修改文件名
  17. 计算机游戏act指的是,act 和 sct 是什么意思
  18. CVL网卡的ADQ特性在SPDK的NVMF测试中的应用实例 - 下篇
  19. tplink软件升级有用吗_tp-link路由器固件怎么升级更新
  20. xshell 使用pem文件登录

热门文章

  1. ubuntu 安装 音视频解码器
  2. linux centos7 yum 安装bt工具 deluge
  3. 十、Spring Boot 安全管理(2)
  4. 升级Xcode 10 后报错问题记录([CP] Copy Pods Resources)
  5. webpack2+angular2 按需加载,优化首屏速度
  6. 【讲座笔记】深度学习在通信领域的应用--Byonghyo Shim教授
  7. 【信息学】【2018.02】噪声环境下基于时频域信号模型的语音去混响
  8. FPGA——for循环的些许思考
  9. 杏山铁矿仿真模拟演示
  10. 投票表决担心数据假?XFS保证结果