【筆記】Jetpack Compose 的鬧鐘程式 (By ChatGPT)

使用 ChatGPT 幫忙產生的範例程式,它真是太方便了!


以下是一個簡單的使用 Jetpack Compose 實現的鬧鐘應用程式範例,它允許用戶設置鬧鐘時間,當時間到達時發出聲音提示。

import android.media.MediaPlayer
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*

@Composable
fun AlarmClock() {
    var time by remember { mutableStateOf("") }
    var isPlaying by remember { mutableStateOf(false) }
    val mediaPlayer = remember { MediaPlayer.create(LocalContext.current, R.raw.alarm_sound) }
    val scope = rememberCoroutineScope()

    fun startAlarm() {
        isPlaying = true
        mediaPlayer.start()
    }

    fun stopAlarm() {
        isPlaying = false
        mediaPlayer.pause()
        mediaPlayer.seekTo(0)
    }

    LaunchedEffect(isPlaying) {
        if (isPlaying) {
            scope.launch {
                delay(30000L) // 30 seconds
                stopAlarm()
            }
        }
    }

    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Text(
            text = "Alarm Clock",
            fontWeight = FontWeight.Bold,
            fontSize = 28.sp,
            modifier = Modifier.padding(bottom = 16.dp)
        )

        TextField(
            value = time,
            onValueChange = { time = it },
            label = { Text("Set alarm time") },
            placeholder = { Text("HH:mm") },
            singleLine = true,
            keyboardOptions = KeyboardOptions.Default.copy(
                imeAction = ImeAction.Done,
                keyboardType = KeyboardType.Number
            ),
            modifier = Modifier.fillMaxWidth()
        )

        Spacer(modifier = Modifier.height(16.dp))

        Row(
            horizontalArrangement = Arrangement.Center,
            modifier = Modifier.fillMaxWidth()
        ) {
            IconButton(
                onClick = { startAlarm() },
                modifier = Modifier.padding(16.dp)
            ) {
                Icon(
                    imageVector = Icons.Filled.PlayArrow,
                    contentDescription = "Start alarm",
                    tint = if (isPlaying) Color.Red else Color.Black,
                    modifier = Modifier.size(48.dp)
                )
            }

            IconButton(
                onClick = { stopAlarm() },
                modifier = Modifier.padding(16.dp)
            ) {
                Icon(
                    imageVector = Icons.Filled.Stop,
                    contentDescription = "Stop alarm",
                    tint = if (!isPlaying) Color.Gray else Color.Black,
                    modifier = Modifier.size(48.dp)
                )
            }
        }

        Spacer(modifier = Modifier.height(16.dp))

        val dateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
        val currentTime = dateFormat.format(Date())
        Text(
            text = "Current time: $currentTime",
            fontSize = 18.sp,
            color = Color.Gray
        )
    }
}

在此示例中,我們使用 MediaPlayer 來播放聲音。當用戶按下“啟動鬧鐘”按鈕時,我們使用 MediaPlayer 開始播放聲音並將 isPlaying 設置為 true。同時,我們也啟動一個協程,延遲 30 秒後停止鬧鐘聲音。在 stopAlarm() 函數中,我們將 isPlaying 設置為 false,暫停播放並將播放進度重設為 0。

TextField 用於讓用戶設置鬧鐘時間。用戶可以輸入格式為“HH:mm”的時間。我們使用 onValueChange 屬性監聽輸入的值並將其存儲在 time 變量中。

我們使用 IconButton 來實現“啟動鬧鐘”和“停止鬧鐘”按鈕。在按鈕上顯示相應的圖標。我們使用 tint 屬性來改變圖標的顏色以反映按鈕的狀態。當鬧鐘正在播放時,“啟動鬧鐘”按鈕將變為紅色,而“停止鬧鐘”按鈕將變為灰色。

最後,我們使用 SimpleDateFormat 格式化當前時間,並在界面上顯示出來。

總體而言,這個範例展示了如何使用 Jetpack Compose 構建一個簡單的應用程序。它展示了如何使用狀態、按鈕和文本字段等基本 UI 元素,以及如何在 Compose 中使用協程。


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *