- 创建一个 Service(服务)类并实现计时器功能。
class TimerService : Service() {
private var startTime: Long = 0
private var isRunning: Boolean = false
private var elapsed: Long = 0
// 计时器更新时间间隔,单位为毫秒
private val TICK_INTERVAL = 1000L
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
if (!isRunning) {
startTime = System.currentTimeMillis() - elapsed
isRunning = true
startTimer()
}
return START_STICKY
}
private fun startTimer() {
val handler = Handler()
handler.post(object : Runnable {
override fun run() {
elapsed = System.currentTimeMillis() - startTime
val minutes = (elapsed / 1000) / 60
val seconds = (elapsed / 1000) % 60
val timerText = String.format("%02d:%02d", minutes, seconds)
// 发送广播
val sendIntent = Intent()
sendIntent.putExtra("timer", timerText)
sendIntent.action = "timer_update"
sendBroadcast(sendIntent)
handler.postDelayed(this, TICK_INTERVAL)
}
})
}
override fun onDestroy() {
super.onDestroy()
isRunning = false
}
}
- 在 MainActivity 中添加显示通知的函数。
private fun showNotification() {
val intent = Intent(this, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)
// 创建通知并设置图标与标题
val notificationBuilder = Notification.Builder(this)
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("计时器已启动")
.setContentIntent(pendingIntent)
// 将 Service 绑定到 Activity
val timerService = Intent(this, TimerService::class.java)
bindService(timerService, serviceConnection, Context.BIND_AUTO_CREATE)
// 显示通知
startForeground(1, notificationBuilder.build())
}