当前位置: 首页 > news >正文

如何用 Kotlin 在 Android 手机开发一个小闹钟、计时器、秒表

以下是在 Android 上用 Kotlin 开发小闹钟、计时器和秒表的方法,分为核心功能实现和界面设计两部分:


闹钟功能实现

AlarmManager 和 BroadcastReceiver

// 设置闹钟
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)val calendar = Calendar.getInstance().apply {set(Calendar.HOUR_OF_DAY, hour)set(Calendar.MINUTE, minute)set(Calendar.SECOND, 0)
}alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.timeInMillis,pendingIntent
)// 接收广播
class AlarmReceiver : BroadcastReceiver() {override fun onReceive(context: Context, intent: Intent) {val notification = NotificationCompat.Builder(context, "alarm_channel").setContentTitle("闹钟").setSmallIcon(R.drawable.ic_alarm).build()val manager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManagermanager.notify(1, notification)}
}


计时器功能实现

CountDownTimer 使用

val timer = object : CountDownTimer(30000, 1000) { // 30秒倒计时,间隔1秒override fun onTick(millisUntilFinished: Long) {val seconds = millisUntilFinished / 1000binding.timerText.text = "$seconds秒"}override fun onFinish() {binding.timerText.text = "时间到!"}
}.start()


秒表功能实现

Handler 延迟消息

var seconds = 0
val handler = Handler(Looper.getMainLooper())
val runnable = object : Runnable {override fun run() {seconds++binding.stopwatchText.text = "$seconds秒"handler.postDelayed(this, 1000)}
}// 开始秒表
handler.post(runnable)// 暂停秒表
handler.removeCallbacks(runnable)


界面布局要点

  1. 闹钟界面

    • TimePicker 组件用于选择时间
    • ToggleButton 控制闹钟开关
  2. 计时器界面

    • NumberPicker 或 EditText 输入分钟/秒数
    • 环形进度条显示剩余时间比例
  3. 秒表界面

    • 大字号数字显示
    • 悬浮按钮控制开始/暂停/重置
<!-- 示例:计时器按钮布局 -->
<Buttonandroid:id="@+id/startButton"android:text="开始"android:onClick="@{() -> viewModel.startTimer()}" /><Buttonandroid:id="@+id/resetButton"android:text="重置"android:onClick="@{() -> viewModel.resetTimer()}" />


数据持久化

  1. 使用 SharedPreferences 存储闹钟设置:
val prefs = getSharedPreferences("AlarmPrefs", MODE_PRIVATE)
prefs.edit().putInt("alarm_hour", hour).apply()

  1. 计时器状态恢复建议用 ViewModel
class TimerViewModel : ViewModel() {val remainingTime = MutableLiveData<Long>()
}


注意事项

  • Android 8.0+ 需设置前台服务并创建通知渠道
  • 使用 WorkManager 处理设备重启后的闹钟恢复
  • 测试时注意屏幕关闭后的后台行为
  • 计时精度要求高时改用 SystemClock.elapsedRealtime()


完整项目可参考 GitHub 上的开源实现如 AlarmClock 或 TimerX。

http://www.dtcms.com/a/356868.html

相关文章:

  • Vue3+Ant-design-vue 实现树形穿梭框
  • Java中对泛型的理解
  • mes表结构思维导图
  • 基于机器学习的多个模型的预测Backtrader自动化交易系统设计
  • Java设计模式是什么?核心设计原则有哪些?
  • 编程速递:RAD Studio 13 即将到来的功能
  • Linux应用软件编程--->数据库
  • C++函数继承
  • 【C++闯关笔记】STL:vector的学习与使用
  • 论文阅读:ICLR 2024 GAIA: A Benchmark for General AI Assistants
  • DBeaver中禁用PostgreSQL SSL的配置指南
  • SQL Server 查看备份计划
  • Creed —— 设置玩家属性(生命/耐力/经验值等)
  • 初学python的我开始Leetcode题-17
  • Azure Marketplace 和 Microsoft AppSource的区别
  • 订餐后台管理系统 -day03 登录模块
  • Linux操作系统Shell脚本-第一章
  • 数据防泄与最小可见:ABP 统一封装行级安全(RLS)+ 列级脱敏
  • 前端vue3入门学习
  • 数据分析编程第七步:分析与预测
  • 【MFC自动生成的文件详解:YoloClassMFC.cpp 的逐行解释、作用及是否能删除】
  • 科技赋能医疗:陪诊小程序系统开发,让就医不再孤单
  • cursor的setting設置換行
  • 舰用燃气机数字孪生:舰船动力智慧管控核心
  • 从0到1玩转 Google SEO
  • 循环高级(1)
  • Parasoft赋能测试:精准捕捉运行时缺陷
  • 深度学习入门Day10:深度强化学习原理与实战全解析
  • 彻底弄清URI、URL、URN的关系
  • 基于LangChain框架搭建AI问答系统(附源码)