
一、本课题要求:设计一个基于Android的闹钟的软件。
实现的功能有:能通过界面设置闹钟的启动条件建立后台服务进程,当满足触发条件时,闹钟响应相应事件。
二、需求分析
该课题实现在手机 *** 作系统Android闹钟提醒功能,携带方便,使用起来灵活、快捷、省心,是一款实用的手机软件。“手机闹钟”可以在后台运行,且能和普通闹钟一样设置多个位置闹铃,有良好的人机交互界面,可对其编辑、启用或禁用,关键在于可以自定义设置取消闹钟的 *** 作。
(1)系统体系结构包括:添加闹铃、设置时间、重复等,闹铃提醒方式,返回首页。
(2)用户界面设计
主页面
取消闹铃页面
三、代码设计
(1)
main.xml代码
解除闹铃代码
(2)代码分析
开发手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行。当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序。注册的闹钟在设备睡眠的时候仍然会保留,可以选择性地设置是否唤醒设备,但是当设备关机和重启后,闹钟将会被清除。
在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_SERVICE)方法来获得AlarmManager对象。
闹钟使用的Demo:com.example.android.apis.app.AlarmController其中设定了两种闹钟,一种是一次性的,一种是重复的。
四、总结
在这个过程中,我学会了很多知识,比如Android环境的搭建和配置问题、Android的构架和基本组建等,同时我学会的最重要的一点是,要利用现有的资源去解决问题,在图书馆、在网络上寻找答案,也可以请教老师或与同学相互讨论。虽然,这个软件目前运行良好,但是我认为代码的健壮还很差,在整个工程的构思方面也不足,用户 *** 作界面还不够灵活,这些问题还需要今后逐一解决。与此同时,这个软件还可以进一步扩展,例如通过Android Api获取位置信息,并在指定地点设置闹钟提醒等,使功能更加强大,带给用户更好的体验与便捷的生活服务。
你设置的时间已经过了。就是说,你的这句话有逻辑问题。if(calendar.getTimeInMillis()>calendar.getTimeInMillis()){
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1)
}
你是想写成这样吧?
if(System.currentTimeMills()>calendar.getTimeInMillis()){...}
还有一个地方你应该注意一下。
最前面一句最好这么写。
Calendar calendar = Calendar.getInstance(Locale.getDefault())
android中可以使用闹钟进行提醒,你只需要告知系统你想在什么时候被提醒,然后需要一个闹钟的广播接收器,当到你设置的时间时,系统会给你发送一条广播,当你接收到广播后你就可以做一些 *** 作,比如启动你的app,或者跳转到你app中的任何一个界面。代码如下://发送闹钟请求
Intent intent = new Intent(mContext, AlarmReceiver.class)
intent.setAction("something")
intent.setType("something")
intent.setData(Uri.EMPTY)
intent.addCategory(“something”)
intent.setClass(context, AlarmReceiver.class)
// 以上给intent设置的四个属性是用来区分你发给系统的闹钟请求的,当你想取消掉之前发的闹钟请求,这四个属性,必须严格相等,所以你需要一些比较独特的属性,比如服务器返回给你的json中某些特定字段。
//当然intent中也可以放一些你要传递的消息。
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, alarmCount, intent, 0)
//alarmCount是你需要记录的闹钟数量,必须保证你所发的alarmCount不能相同,最后一个参数填0就可以。
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE)
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent)
//这样闹钟的请求就发送出去了。time是你要被提醒的时间,单位毫秒,注意不是时间差。第一个参数提醒的需求用我给出的就可以,感兴趣的朋友,可以去google一下,这方面的资料非常多,一共有种,看一下就知道区别了。
//取消闹钟请求
Intent intent = new Intent(mContext, AlarmReceiver.class)
intent.setAction("something")
intent.setType(something)
intent.setData(Uri.EMPTY)
intent.addCategory(something)
intent.setClass(context, AlarmReceiver.class)
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, alarmCount, intent, 0)
//alarmCount对应到你设定时的alarmCount,
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE)
am.cancel(pendingIntent)
//接着,你需要一个广播接收的类:
public class AlarmReceiver extends BroadcastReceiver{
private NotificationManager manager
@Override
public void onReceive(Context context, Intent intent) {
manager = (NotificationManager)context.getSystemService(android.content.Context.NOTIFICATION_SERVICE)
//例如这个id就是你传过来的
String id = intent.getStringExtra("id")
//MainActivity是你点击通知时想要跳转的Activity
Intent playIntent = new Intent(context, MainActivity.class)
playIntent.putExtra("id", id)
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, playIntent, PendingIntent.FLAG_UPDATE_CURRENT)
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
builder.setContentTitle("title").setContentText("提醒内容").setSmallIcon(R.drawable.app_icon).setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent).setAutoCancel(true).setSubText("二级text")
manager.notify(1, builder.build())
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)