如何用 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.pswp.cn/pingmian/94716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94716.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode Hot 100 第8天

1. 73 矩陣置零&#xff08;記錄標識&#xff09; 鏈接&#xff1a;題目鏈接 題解&#xff1a; 題解 時間復雜度O(n*m)&#xff1a; 方案1(空間復雜度O(n m))&#xff1a;matrix[i][j] 0&#xff0c;意味著 第i行、第j列所有元素都要置為0&#xff1b;維護能置為0行、列的集…

Python OpenCV圖像處理與深度學習:Python OpenCV開發環境搭建與入門

Python OpenCV入門&#xff1a;環境設置 學習目標 通過本課程&#xff0c;學員們將學習在Windows、macOS和Linux操作系統上安裝Python和OpenCV&#xff0c;配置開發環境&#xff0c;以及如何使用Jupyter Notebook和PyCharm等集成開發環境&#xff08;IDE&#xff09;進行基本操…

【論文閱讀】SegCLIP:用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習

【論文閱讀】SegCLIP&#xff1a;用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習 文章目錄【論文閱讀】SegCLIP&#xff1a;用于高分辨率遙感圖像語義分割的多模態視覺語言和快速學習一、介紹二、聯系工作三、方法四、實驗結果**數據集**SegCLIP: Multimodal Visual-…

Anaconda、OpenCV安裝配置方法

目錄 1.Anaconda安裝 1.1 國內鏡像軟件下載 1.2 點擊exe&#xff0c;一路下一步安裝 1.3 檢查安裝情況 1.3.1 安裝前后系統環境變量變化對比 1.3.2 查看安裝路徑和版本 1.4 Anaconda自帶的python版本查看命令如下&#xff1a; 1.5 修改鏡像地址&#xff0c;加快下載包的…

C++函數繼承

C函數繼承引言C三大特征分別為封裝&#xff0c;繼承和多態&#xff0c;它們構成了面向對象編程的基石&#xff0c;它們協同工作以提升代碼的模塊化&#xff0c;可復用性和靈活性封裝&#xff1a;提高代碼的維護性&#xff08;當程序出現問題時可以準確定位&#xff09;繼承&…

瞬態數據表定義Fluent變量

重要說明&#xff1a;本文基于2025R2版本編寫&#xff0c;其他版本可能存在差異。1 概述瞬態數據表是定義 Fluent 變量隨時間變化規律的profile文件&#xff0c;文件類型為文本文件。瞬態數據表假設所有時刻&#xff0c;被定義的對象都是均勻分布&#xff0c;無法考慮變量在空間…

文本嵌入模型的本質

這是一個非常深刻且重要的問題。我們來詳細拆解一下“通用文本嵌入模型”的本質。 我們可以從三個層次來理解它&#xff1a;它是什么&#xff08;What&#xff09;&#xff0c;它如何工作&#xff08;How&#xff09;&#xff0c;以及它為什么重要&#xff08;Why&#xff09;。…

Linux筆記13——shell編程基礎-7

補充1.printf %s\t%s 字符串 中&#xff0c;\t一定不要加雙引號&#xff0c;這一點和在awk中使用的時候有所不同2.其中%s也可以寫成%ns&#xff0c;n可以被用來設置列寬&#xff0c;默認右對齊#打印輸出文件系統的使用情況 [rootlocalhost ~]# printf %-30s\t%s\n $(df -h | aw…

【混合開發】Android+WebView視頻圖片播放硬件加速詳解

webview視頻播放出現白屏、藍屏、花屏、黑屏等等 但由于布局結構是androidwebviewH5本地視頻等。視頻播放導致的異常排查起來十分復雜且沒有原生的相關日志 于是需要給webview播放視頻進行硬件加速&#xff0c;剛開始以為是一件很簡單的配置而已。本著無經驗從頭開始的原則&am…

Allegro-DDR3實戰-差分對-等長設置-區域規則

本章內容&#xff1a; 一&#xff09;Allegro之DDR3設計 (實操干貨) 二&#xff09;規則設置具體步驟 DDR3信號表: (eg&#xff1a;鎂光MT41J256M16HA-15E) 數據信號 DQ[15:0] DQS[1:0] DM[1:0] DQ:雙向數據總線 DQS:數據選通&#xff0c;用于同步數據傳…

七牛云OSS空間復制遷移到另外一個空間

創新新的空間時存儲地區必須一致 訪問控制必須選擇公開 1、下載七牛的同步工具并解壓 qshell&#xff08;http://developer.qiniu.com/docs/v6/tools/qshell.html&#xff09; 2、解壓文件 3、運行cmd登錄到七牛賬號 qshell account 你的七牛AK 你的七牛SK 你的賬號 4、測…

windows中Qwen3?Coder 與 Claude Code 搭配使用

claude安裝命令 npm install -g anthropic-ai/claude-code環境變量配置 set ANTHROPIC_BASE_URLhttps://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy set ANTHROPIC_AUTH_TOKENyour-dashscope-apikey可能還需要配置自己的git環境變量 查看git安裝位置 按下Win S打…

thunar 文件管理器實現雙擊使用 nvim打開

archlinux 中thunar 文件管理器&#xff0c;如何實現雙擊使用 nvim打開查看。我用的是kitty 終端。 在 Arch Linux Thunar kitty nvim 的環境里&#xff0c;要實現 雙擊文件 -> 用 nvim 打開&#xff0c;你可以這樣配置&#xff1a;設置為默認應用 如果你想 雙擊直接用 n…

深度學習----卷積神經網絡實現數字識別

一、準備工作 導入庫&#xff0c;導入數據集&#xff0c;劃分訓練批次數量&#xff0c;規定訓練硬件&#xff08;這部分 import torch from torch import nn # 導入神經網絡模塊 from torch.utils.data import DataLoader # 數據包管理工具&#xff0c;打包數據 from torch…

鴻蒙Harmony-從零開始構建類似于安卓GreenDao的ORM數據庫(四)

目錄 一,查詢表的所有數據 二,根據條件查詢數據 三,數據庫升級 前面章節已經講解了數據庫的創建,表的創建,已經增刪改等操作。下面我們來講解一下數據庫的查詢以及升級操作。 一,查詢表的所有數據 先來看看官方文檔: query(predicates: RdbPredicates, callback: Asy…

20250829_編寫10.1.11.213MySQL8.0異地備份傳輸腳本+在服務器上創建cron任務+測試成功

0.已知前提條件: 10.1.11.213 堡壘機訪問 mysql 8.0 版本 密碼在/root/.my.cnf 備份腳本:/data/backup_mysql/mysql_backup.sh alarm_system:動環數據庫 exit_and_entry:出入境數據庫 logs:備份日志 project_cg_view_prod:采購跟蹤系統 all :數據庫整體備份 imip_ecb…

PostgreSQL 流復制與邏輯復制性能優化與故障切換實戰經驗分享

PostgreSQL 流復制與邏輯復制性能優化與故障切換實戰經驗分享 在高可用和數據安全愈發受到重視的生產環境中&#xff0c;PostgreSQL 復制技術是保障業務連續性的重要手段。本文結合真實生產場景&#xff0c;分享流復制&#xff08;Physical Replication&#xff09;與邏輯復制&…

Django開發規范:構建可維護的AWS資源管理應用

引言 在現代Web開發中,遵循一致的開發規范對于項目的可維護性和團隊協作至關重要。本文基于實際的AWS資源管理項目,分享一套經過實踐檢驗的Django開發規范,涵蓋模型設計、Admin配置、管理命令和工具類開發等方面。 模型開發規范 數據模型設計原則 良好的數據模型設計是應…

機器學習可解釋庫Shapash的快速使用教程(五)

文章目錄1 快速使用1.1 安裝1.2 三個簡單步驟快速入門1.2.1 步驟 1&#xff1a;準備模型和數據1.2.2 步驟 2&#xff1a;聲明并編譯 SmartExplainer1.2.3 步驟 3&#xff1a;可視化和探索1.2.4 啟動 Web 應用1.2.5 將解釋結果導出為數據2 Shapash的后端集成2.1 方法一&#xff…

如何在emacs中添加imenu插件

在配置文件中添加&#xff1a; ;; 刪除現有的包管理器配置&#xff08;如果有&#xff09;&#xff0c;然后添加以下&#xff1a;;; 初始化包管理器 (require package);; 清除現有的倉庫列表 (setq package-archives nil);; 添加正確的倉庫&#xff08;注意&#xff1a;使用 H…