Android项目之小闹钟代码
在上一篇的博文中,我们将我们的android小项目的简单的界面做了一下(简单的不能再简单的界面),下面就让我们看一下到底是怎么样一步一步的将这一个小项目实现的,废话不多说,直接上代码:
1.下面是主Activity
package android.dck.demo;import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;public class MyAlarmManagerDemo extends Activity {private AlarmManager alarm = null; // 闹钟管理private Button set = null; // 按钮组件private TextView msg = null; // 文本显示组件private Calendar calendar = Calendar.getInstance(); // 取得Calendar对象private TimePicker time = null; // 时间选择器private int hourOfDay = 0; // 保存设置的时private int minute = 0; // 保存设置的分private ListView listview;//设置数据类型private List<String> listdata;private ArrayAdapter<String> adapter;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.main);init();//初始化数据源listdata=new ArrayList<String>();//初始化适配器adapter=new ArrayAdapter<String>(MyAlarmManagerDemo.this,android.R.layout.simple_expandable_list_item_1,listdata);/*** 等到我们刷新的时候我们在将适配器与listview绑定一次*/}//初始化方法public void init(){time = (TimePicker)findViewById(R.id.time); // 取得时间选择器set = (Button)findViewById(R.id.set); // 取得按钮组件msg = (TextView)findViewById(R.id.msg); // 取得组件listview=(ListView) findViewById(R.id.listView);set.setOnClickListener(new SetOnClickListenerImpl()); // 设置单击事件alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); // 取得闹钟服务time.setOnTimeChangedListener(new OnTimeChangedListenerImpl()); // 设置时间改变监听time.setIs24HourView(true); // 24小时制//通过给listview设置长按事件,从而我们来删除闹钟listview.setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View view,int position, long id) {// TODO Auto-generated method stubint hour,minute;String result[]=listdata.get(position).trim().split(":");//将其转化为整数形式hour=Integer.parseInt(result[0]);minute=Integer.parseInt(result[1]);Intent intent=new Intent(MyAlarmManagerDemo.this,MyAlarmReceiver.class);intent.setAction("dck.cqq.com.android");PendingIntent pend=PendingIntent.getBroadcast(MyAlarmManagerDemo.this, hour+minute,intent,PendingIntent.FLAG_UPDATE_CURRENT);//下面我们将闹钟取消掉alarm.cancel(pend);listdata.remove(position);/*** 当我们适配器中的数据发生改变时,我们需要重新设置一下适配器,并通知数据发生改变*///刷新适配器listview.setAdapter(adapter);//通知数据发生变化adapter.notifyDataSetChanged();Toast.makeText(MyAlarmManagerDemo.this, "闹钟删除成功!",Toast.LENGTH_SHORT).show(); // 显示提示信息return false;}});}//监听器private class OnTimeChangedListenerImpl implements OnTimeChangedListener {@Overridepublic void onTimeChanged(TimePicker view, int hourOfDay, int minute) {//java.util.Calendar.setTimeInMillis(long) 方法从给定的long值设置日历的当前时间。MyAlarmManagerDemo.this.calendar.setTimeInMillis(System.currentTimeMillis()); // 设置当前时间MyAlarmManagerDemo.this.calendar.set(Calendar.HOUR_OF_DAY,hourOfDay); // 设置小时MyAlarmManagerDemo.this.calendar.set(Calendar.MINUTE, minute); // 设置分钟MyAlarmManagerDemo.this.calendar.set(Calendar.SECOND, 0); // 设置秒MyAlarmManagerDemo.this.calendar.set(Calendar.MILLISECOND, 0); // 设置毫秒MyAlarmManagerDemo.this.hourOfDay = hourOfDay; // 保存设置的小时MyAlarmManagerDemo.this.minute = minute; // 保存设置的分钟}}private void saveData(int hour, int min) {// TODO Auto-generated method stubString result=hour+":"+min;listdata.add(result);/*** 等到我们刷新的时候我们在将适配器与listview绑定一次*/listview.setAdapter(adapter);//通知数据发生变化adapter.notifyDataSetChanged();}//监听设置按钮private class SetOnClickListenerImpl implements OnClickListener {@Overridepublic void onClick(View view) {Intent intent = new Intent(MyAlarmManagerDemo.this,MyAlarmReceiver.class); // 指定跳转的Intentintent.setAction("dck.cqq.com.android"); // 定义广播的ActionPendingIntent sender = PendingIntent.getBroadcast(MyAlarmManagerDemo.this,calendar.get(Calendar.HOUR_OF_DAY)+calendar.get(Calendar.MINUTE), intent,PendingIntent.FLAG_UPDATE_CURRENT); // 指定PendingIntent//Calendar.getTimeInMillis() 方法返回此Calendar以毫秒为单位的时间。//其实这个类就是获取当前的时间MyAlarmManagerDemo.this.alarm.set(AlarmManager.RTC_WAKEUP,MyAlarmManagerDemo.this.calendar.getTimeInMillis(), sender); // 设置闹钟//将数据存入到适配器中saveData(calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE));//设置闹钟MyAlarmManagerDemo.this.msg.setText("闹钟响起的时间是:"+ MyAlarmManagerDemo.this.hourOfDay + "时"+ MyAlarmManagerDemo.this.minute + "分。"); // 提示文字Toast.makeText(MyAlarmManagerDemo.this, "闹钟设置成功!",Toast.LENGTH_SHORT).show(); // 显示提示信息}}
}
2.AlarmMessage
package android.dck.demo;import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;public class AlarmMessage extends Activity {private NotificationManager manager;private Notification notification;private MediaPlayer media;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//首先我们要获取服务manager=(NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);//初始化一个通知notification=new Notification(R.drawable.messagedck,"要工作了",System.currentTimeMillis());Intent intent=new Intent(AlarmMessage.this,ShowMessActivity.class);PendingIntent in=PendingIntent.getActivity(AlarmMessage.this,0, intent,PendingIntent.FLAG_UPDATE_CURRENT);notification.setLatestEventInfo(AlarmMessage.this, "努力上班","为了老婆,再累也心甘情愿",in);notification.defaults=Notification.DEFAULT_ALL;manager.notify(1,notification);//然后播放音乐media=MediaPlayer.create(this,R.raw.music);//设置循环播放media.setLooping(true);//开始播放media.start();//在这里我们利用了一个对话框机制new AlertDialog.Builder(this) // 建立对话框.setIcon(R.drawable.pic_m) // 设置图标.setTitle("闹钟时间已到!") // 设置对话框标题.setMessage( // 定义显示文字"闹钟响起,现在时间:"+ new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date(System.currentTimeMillis()))).setPositiveButton("关闭", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {media.stop();//用完了一定压迫释放资源media.release();AlarmMessage.this.finish(); // 关闭对话框后本程序结束}}).show(); // 显示对话框//下面我们还要发送一个通知}
}
3.广播接受者
ublic class MyAlarmReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent it = new Intent(context, AlarmMessage.class); // 定义要操作的Intentit.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 传递一个新的任务标记//在这里用到了上下文对象context.startActivity(it); // 启动Intent}}
4.设置当通知被点击时要进入的界面
public class ShowMessActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.show);}}
最后,总结一下,开发这个项目用了一节课的时间,我觉得我们还是要把基础打好,我今天做这个小程序就是把以前零碎的只是做了一下总结,也想着作为一个学习的资料,帮助大家提高自己,还是那句话,我们要有自己的核心竞争力,现在的IT培训机构漫天飞舞,我们的行业也是鱼龙混珠,但是只要你是科班出身,你是干这一行,爱这一行的,要知道,你的本领就像酒一样,时间越久,你的价值越大,祝愿我们的大Android未来无限.
Android项目之小闹钟代码相关推荐
- arduino智能闹钟_【Arduino综合项目】小闹钟
小闹钟项目 在额济纳支教这一年,给孩子们上了很多Arduino开发的课,也带他们完成了几个Arduino综合项目,下面陆续把这些小项目放上来,欢迎围观~~~非科班出身,C语言学的不好,望各路大神批评指 ...
- android项目实战 博学谷 代码,《Android项目实战-博学谷》登录注册
标题栏 思路 由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout ...
- Android项目---拼图小游戏(上)
类似的小游戏大家肯定都接触过,进入程序,图片会无序排列,共九张乱序图片,需要移动到给出模板图片相同方为成功,在游戏进行的过程中会有时间在计时,当拼图成功时时间停止,点击重新开始,图片会重新打乱,时间重 ...
- Android项目---拼图小游戏(下)
承接上篇文章,上篇文章完成了游戏中的计时和进入程序碎片的自动乱序排列,本次文章将完成剩余的部分(碎片的移动和拼图的成功逻辑) 实现流程大概:默认最后一张照片不显示,但实际存在,点击空白区域相邻的图片( ...
- android课程设计小游戏代码,课程设计:小游戏
1.菜单的模拟 我在制作菜单的时候是先打印出底图,然后利用getch()获取按键的信息,然后根据接收到的信息,利用标准输出句柄和SetConsoleTextAttribute()函数来变换相应选项的颜 ...
- android开发使用c+_如何在Android项目中开始使用C ++代码
android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...
- 一种MVVM风格的Android项目架构浅析
前几天接触公司一Android项目,刚看代码时,不知道这么多层级的代码都是干嘛的,看着有点儿懵.只有清楚了结构和流程,才能够在浩瀚的代码里游刃有余. 先不管局部是什么,从全局上去看才能把一件事情看清楚 ...
- android闹钟的需求分析,手机小闹钟需求分析
Android 手机小闹钟 日常生活工作中,时常会有一些重要事情或日程安排,而闹钟作为一种提醒人们的工具,成为很多人生活中不可或缺的一部分. 本软件包括的功能有闹钟设置.闹钟创建.闹钟关闭等模块.本应 ...
- 【项目篇】Android团队项目开发之统一代码规范
前言 团队项目开发前的统一三要素:统一需求/开发文档,统一代码规范,统一环境(编译/测试/发布). 一个项目团队,要想有高效的产出,必须在团队协作上下好功夫,必须在项目开发统一进度上做好协调.只有在高 ...
最新文章
- 20190226-利用序列化完成小型记账程序
- 姚期智云栖大会首日演讲:为什么我说现在是金融科技的“新”黄金时代
- redis3.0.0 集群安装详细步骤
- vue-router2路由参数注意问题
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...
- flask socket连接mysql_Flask连接mysql,实现页面登录
- 如何在AngularJS的ng-options中设置value属性?
- 小学生python-小学生都开始学的Python编程到底是什么?
- KoalaUI的DateTimePicker的若干问题解答
- python变量/分支/循环/数组/列表/元组/序列
- java是解释型编程语言_程序设计语言可以分为两类:编译型语言和解释型语言...
- $python数据分析基础——初识numpy库
- 阿里云数据湖解决方案全面满足数据需求,帮助企业释放数据价值
- Kafka消息压缩与解压
- FPGA学无止境(目录篇)
- Linux下安装mysql(CentOS7)
- iOS开发-当APP涉及到用户敏感信息适配Xcode9及(ios11)
- Android 开机logo支持的格式
- FTP上传失败报错227 Entering Passive Model (222,111,8,111,10,40)
- 微信小程序订阅消息通过服务通知发送