我有一个通知,当我点击它时,我想启动应用程序(如果它仍未运行),但是如果应用程序已在运行,则我不想重新启动它。
因此,我在创建PendingIntent.FLAG_UPDATE_CURRENT
时使用了PendingIntent
标志。
我的代码:
private val notificationManager by lazy { NotificationManagerCompat.from(this) }
fun testPush() {
val notificationBuilder = NotificationCompat.Builder(this, BuildConfig.APPLICATION_ID)
.setSmallIcon(R.drawable.ill_launcher)
notificationBuilder
.setContentTitle("Title")
.setContentText("Test text")
.setContentIntent(buildPendingIntent())
notificationBuilder
.setAutoCancel(true)
.priority = NotificationCompat.PRIORITY_DEFAULT
notificationManager.notify(1, notificationBuilder.build())
}
private fun buildPendingIntent(): PendingIntent {
val intent = Intent(this, RootActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
intent.putExtra("action", RootActivity.DEFAULT_INTENT)
return PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}
但是当我启动该应用程序并单击通知时,将重新创建该活动。
答案 0 :(得分:1)
与其像您一样为Intent
构建RootActivity
,还需要为应用程序创建一个“启动Intent
”。最简单的方法是调用PackageManager.getLaunchIntentForPackage()
并传递您自己的包名称。在对Intent
的调用中使用返回的PendingIntent.getActivity()
。
这将在您的应用未运行时启动它,否则,如果它已经在运行,它将仅将包含您的应用的现有任务置于前台。