以下是在 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)
界面布局要點
-
鬧鐘界面
- TimePicker 組件用于選擇時間
- ToggleButton 控制鬧鐘開關
-
計時器界面
- NumberPicker 或 EditText 輸入分鐘/秒數
- 環形進度條顯示剩余時間比例
-
秒表界面
- 大字號數字顯示
- 懸浮按鈕控制開始/暫停/重置
<!-- 示例:計時器按鈕布局 -->
<Buttonandroid:id="@+id/startButton"android:text="開始"android:onClick="@{() -> viewModel.startTimer()}" /><Buttonandroid:id="@+id/resetButton"android:text="重置"android:onClick="@{() -> viewModel.resetTimer()}" />
數據持久化
- 使用
SharedPreferences
存儲鬧鐘設置:
val prefs = getSharedPreferences("AlarmPrefs", MODE_PRIVATE)
prefs.edit().putInt("alarm_hour", hour).apply()
- 計時器狀態恢復建議用
ViewModel
:
class TimerViewModel : ViewModel() {val remainingTime = MutableLiveData<Long>()
}
注意事項
- Android 8.0+ 需設置前臺服務并創建通知渠道
- 使用
WorkManager
處理設備重啟后的鬧鐘恢復 - 測試時注意屏幕關閉后的后臺行為
- 計時精度要求高時改用
SystemClock.elapsedRealtime()
完整項目可參考 GitHub 上的開源實現如 AlarmClock 或 TimerX。