eeg*_*per 2 android broadcastreceiver kotlin
onReceive()我想从BroadcastReceiver 的方法启动一个活动。这是我正在使用的代码:
class TimeReminderReceiver : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
println("RECEIVED")
val i = Intent(p0!!, TimeReminderActivity::class.java)
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
p0.startActivity(i)
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题在 stackoverflow 上有很多答案,我都试过了,但没有一个对我有用。该应用程序只是打印 RECEIVED并保留在那里。logcat 上什么也没有显示,没有例外,什么也没有。我也在 mainfest 中添加了接收器。
<receiver
android:name=".receivers_and_activities.TimeReminderReceiver" />
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?
编辑:
调用广播的代码:
val intent = Intent(this@MainActivity, TimeReminderReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this@MainActivity, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT)
val am = this@MainActivity.getSystemService(Context.ALARM_SERVICE) as AlarmManager
am.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
Run Code Online (Sandbox Code Playgroud)
正如您所评论的那样,当您的应用程序在Android 10(API 级别 29)上处于后台时,您正在尝试启动活动。
从 Android(API 级别 29)开始,当您的应用程序处于后台时,他们对打开 Activity 施加了一些限制。
Android 10(API 级别 29)及更高版本对应用在后台运行时何时启动活动进行了限制。
您可以在这里找到从后台启动活动的限制。
他们还提到
几乎在所有情况下,后台应用程序都应显示时间敏感的通知,以便向用户提供紧急信息,而不是直接启动活动。何时使用此类通知的示例包括处理来电或活动闹钟。
因此,要克服这种行为,而不是在后台调用您的应用程序,您应该以全屏意图显示高优先级通知。
有关高优先级通知和全屏意图的更多信息,您可以在此处查看显示时间敏感的通知
| 归档时间: |
|
| 查看次数: |
6334 次 |
| 最近记录: |