Android编程,使用Kotlin,以下是SixthActivity.kt代码 package com.example.activitytest
import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat
class SixthActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.sixth_layout) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } } } 以下是layout文件:
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SixthActivity"> </androidx.constraintlayout.widget.ConstraintLayout>
请在以上代码基础上,增加功能:动态注册和监听系统时间变化,每5秒钟将时间显示在SixthActivity界面的顶部中间位置,时间格式:当前时间:YYYY-MM-DD HH:MI:SS。 注意:必须使用动态注册BroadcastReceiver的方式实现上述代码。
要在 SixthActivity
中动态注册一个 BroadcastReceiver
来监听系统时间变化,并每5秒钟更新一次时间显示,可以按照以下步骤进行:
TextView
来显示时间:在 sixth_layout.xml
中添加一个 TextView
。BroadcastReceiver
:在 SixthActivity
中创建一个内部类 TimeChangeReceiver
。BroadcastReceiver
:在 onCreate
方法中注册 BroadcastReceiver
。BroadcastReceiver
中更新 TextView
的内容。以下是完整的实现代码:
sixth_layout.xml
文件<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SixthActivity">
<TextView
android:id="@+id/timeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="当前时间:"
android:textSize="18sp"
android:layout_marginTop="16dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
SixthActivity.kt
文件package com.example.activitytest
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import java.text.SimpleDateFormat
import java.util.*
class SixthActivity : AppCompatActivity() {
private lateinit var timeTextView: TextView
private lateinit var timeChangeReceiver: TimeChangeReceiver
private val handler = Handler(Looper.getMainLooper())
private val updateTimeRunnable = object : Runnable {
override fun run() {
updateTime()
handler.postDelayed(this, 5000) // 每5秒更新一次
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.sixth_layout)
timeTextView = findViewById(R.id.timeTextView)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// 动态注册BroadcastReceiver
timeChangeReceiver = TimeChangeReceiver()
val filter = IntentFilter().apply {
addAction(Intent.ACTION_TIME_TICK)
addAction(Intent.ACTION_TIME_CHANGED)
addAction(Intent.ACTION_TIMEZONE_CHANGED)
}
registerReceiver(timeChangeReceiver, filter)
// 开始定时更新
handler.post(updateTimeRunnable)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(timeChangeReceiver)
handler.removeCallbacks(updateTimeRunnable)
}
private fun updateTime() {
val currentTime = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(Date())
timeTextView.text = "当前时间:$currentTime"
}
inner class TimeChangeReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
updateTime()
}
}
}
sixth_layout.xml
中添加了一个 TextView
,用于显示当前时间。SixthActivity
类:
onCreate
方法中,初始化 TextView
并动态注册 BroadcastReceiver
。Handler
和 Runnable
,每5秒钟更新一次时间。onDestroy
方法中,取消注册 BroadcastReceiver
并移除 Runnable
。updateTime
方法用于获取当前时间并更新 TextView
的内容。TimeChangeReceiver
是一个内部类,继承自 BroadcastReceiver
,用于接收时间变化的广播并更新时间。这样,每当系统时间变化时,BroadcastReceiver
会接收到广播并更新 TextView
的内容。同时,每5秒钟也会自动更新一次时间显示。