Я пытался создать полноэкранный будильник.
Я знаю, что основным ключом является AlarmManager для планирования задач на определенное время в будущем. Мне удалось использовать AlarmManager, намерение и приемник широковещательной передачи, чтобы иметь возможность распечатать и записать фрагмент текста через несколько секунд, даже если приложение работало в фоновом режиме. Я также могу создавать уведомления с помощью NotificationCompat и канала уведомлений.
Но как мне на самом деле сделать так, чтобы пользовательский интерфейс будильника отображался на экране блокировки или при открытом другом приложении?
Вот мой текущий код:
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()
setContent {
AlarmManagerGuideTheme {
var secondsText = 7L
var message = "Test message"
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
Как создать полноэкранный будильник? [закрыто] ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1771376990
Anonymous
Я пытался создать полноэкранный будильник.
Я знаю, что основным ключом является AlarmManager для планирования задач на определенное время в будущем. Мне удалось использовать AlarmManager, намерение и приемник широковещательной передачи, чтобы иметь возможность распечатать и записать фрагмент текста через несколько секунд, даже если приложение работало в фоновом режиме. Я также могу создавать уведомления с помощью NotificationCompat и канала уведомлений.
Но как мне на самом деле сделать так, чтобы пользовательский интерфейс будильника отображался на экране блокировки или при открытом другом приложении?
Вот мой текущий код:
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()
setContent {
AlarmManagerGuideTheme {
var secondsText = 7L
var message = "Test message"
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")
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79891069/how-to-create-a-fullscreen-alarm[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия