Приложение Wear OS Alarm: запуск активности будильника из AlarmManager или BroadcastReceiverAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Wear OS Alarm: запуск активности будильника из AlarmManager или BroadcastReceiver

Сообщение Anonymous »

Я пытаюсь создать автономное приложение-будильник для своих часов (Pixel Watch 2). Все шло гладко, пока мне не понадобилось показать экран (

Код: Выделить всё

Activity
), когда будильник сработает, чтобы отобразить кнопку повтора. Я пробовал много разных вещей, таких как:
  • Передача PendingIntent с Activity в AlarmManager
  • Передача PendingIntent с помощью BroadcastReceiver

    Который пытается запустить действие (здесь нет сбоя, но и нет действия показано)
  • Который пытается отобразить уведомление с помощью setFullScreenIntent (уведомление отображается, Activity — нет)
    < li>Запускает службу переднего плана, которая отображает уведомление с помощью setFullScreenIntent (уведомление отображается, Activity нет)
[*]Передача PendingIntent с помощью Service (сбой, поскольку я не могу использовать службу переднего плана, если передать ее таким образом)

Поэтому я больше не знаю, что попробовать. Я пробовал все варианты с разными флагами намерений, но ничего не произошло. Единственное, что работает, это если я использую PendingIntent с Activity и оставляю приложение открытым, Activity запустится (то же самое происходит при запуске из BroadcastReceiver.
Я не уверен, какой код поможет, поэтому я покажу передачу PendingIntent с помощью класса Activity:

Код: Выделить всё

val Context.alarmManager: AlarmManager
get() = this.getSystemService(Context.ALARM_SERVICE) as AlarmManager

fun setAlarm(context: Context, millis: Long) {
val alarmManager = context.alarmManager
if(!alarmManager.canScheduleExactAlarms()) {
return
}
val alarmActivity = Intent(context, AlarmActivity::class.java).also {
it.flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
context.alarmManager.setAlarmClock(
AlarmManager.AlarmClockInfo(
millis,
PendingIntent.getActivity(context, 1, Intent(context, MainActivity::class.java), PendingIntent.FLAG_IMMUTABLE)
),
PendingIntent.getActivity(context, 2, alarmActivity, PendingIntent.FLAG_IMMUTABLE)
)
}

Код: Выделить всё

class AlarmActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

logd("on create alarm activity")

setTheme(android.R.style.Theme_DeviceDefault)

setContent {
MyTheme {
Box(modifier = Modifier.fillMaxSize()) {
Text("Alarm!!")
}
}
}

setTurnScreenOn(true)
}
}
У меня закончились идеи, поэтому, если у кого-то возникнет идея указать мне правильное направление, я буду очень признателен.


Подробнее здесь: https://stackoverflow.com/questions/791 ... streceiver
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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