Как создать полноэкранный будильник?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как создать полноэкранный будильник?

Сообщение Anonymous »

Здравствуйте, я в течение 1–2 недель непрерывно пытался создать полноэкранный будильник, например, используемый приложениями для будильников, такими как Alarmy.
Я знаю, что основным ключом является AlarmManager для планирования задач на фиксированное время в будущем. Следуя некоторым онлайн-руководствам, я смог использовать AlarmManager, намерение и приемник широковещательной передачи, чтобы иметь возможность распечатать и записать фрагмент текста через несколько секунд, даже если приложение работает в фоновом режиме. Я также могу создавать уведомления с помощью NotificationCompat и канала уведомлений.
Но как мне на самом деле сделать так, чтобы пользовательский интерфейс будильника отображался на экране блокировки или при открытом другом приложении? Не только уведомление.
Пытался следовать некоторым руководствам и читать официальную документацию по службам переднего плана, полноэкранному уведомлению. Я также искал курсы и книги, посвященные взаимодействию этого типа системы, а также тому, как рисовать поверх других приложений, которые использует Alarmy. Пытаясь задать вопросы ИИ и просматривая множество сообщений в блогах по этим темам, я так и не нашел решения.
Не знаю, как действовать. Если бы кто-нибудь мог указать мне правильное направление, я был бы признателен.
Вот мой текущий код:
MainActivity.kt
package com.example.alarmmanagerguide

import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.alarmmanagerguide.ui.theme.AlarmManagerGuideTheme
import java.time.LocalDateTime
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val scheduler = AndroidAlarmScheduler(this)
enableEdgeToEdge()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED
) {
requestPermissions(
arrayOf(Manifest.permission.POST_NOTIFICATIONS),
100
)
}
}
setContent {
AlarmManagerGuideTheme {

var secondsText = 7L
var message = "jorik"

Button(
onClick = {
val alarmItem = AlarmItem(
time = LocalDateTime.now()
.plusSeconds(secondsText),
message = message
)
scheduler.schedule(alarmItem)
},
modifier = Modifier.padding(16.dp)
) {
Text("Schedule")
}
}
}
}
}

AlarmItem.kt
package com.example.alarmmanagerguide

import java.time.LocalDateTime

data class AlarmItem(
val time: LocalDateTime,
val message: String
)

AndroidAlarmScheduler.kt
package com.example.alarmmanagerguide

import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import java.time.ZoneId

class AndroidAlarmScheduler(
val context: Context
) {
val alarmManager = context.getSystemService(AlarmManager::class.java)

fun schedule(item: AlarmItem) {
val intent = Intent(context, AlarmReceiver::class.java)
intent.putExtra("EXTRA_MESSAGE", item.message)
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
item.time.atZone(ZoneId.systemDefault()).toEpochSecond() * 1000,
PendingIntent.getBroadcast(
context,
item.hashCode(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
)
}
}

AlarmReceiver.kt
package com.example.alarmmanagerguide

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent

class AlarmReceiver: BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {
val message = intent.getStringExtra("EXTRA_MESSAGE")
println("Alarm triggered: $message")
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... reen-alarm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»