基于android的闹钟如何添加和删除

基于android的闹钟如何添加和删除,第1张

一、本课题要求:设计一个基于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())

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11419445.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存