从 Android 版本 10(SDK 版本 29)开始,如果应用程序在后台运行,其他答案将不再有效,例如在BroadcastReceiver
.
为了使其在 Android 10 及更高版本上运行,如果您确实需要从后台启动 Activity [来源],则应使用全屏 Intent:
Android 10(API 级别 29)及更高版本对应用在后台运行时何时启动 Activity 施加了限制。这些限制有助于最大限度地减少对用户的干扰,并使用户更好地控制屏幕上显示的内容。
在几乎所有情况下,后台应用程序都应该显示时间敏感的通知,以向用户提供紧急信息,而不是直接启动活动。何时使用此类通知的示例包括处理来电或活动闹钟。
这可以通过以下方式实现[来源]:
val fullScreenIntent = Intent(this, CallActivity::class.java)
val fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Incoming call")
.setContentText("(919) 555-1234")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
// Use a full-screen intent only for the highest-priority alerts where you
// have an associated activity that you would like to launch after the user
// interacts with the notification. Also, if your app targets Android 10
// or higher, you need to request the USE_FULL_SCREEN_INTENT permission in
// order for the platform to invoke this notification.
.setFullScreenIntent(fullScreenPendingIntent, true)
val incomingCallNotification = notificationBuilder.build()
此答案的部分内容是从Android 开源项目创建和共享的作品中复制而来,并根据Creative Commons 2.5 Attribution License中描述的条款使用。