问题描述
我在服务中记录:
intent = new Intent(this,MainActivity_Large.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,intent,0);
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this,CHANNEL_ID)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setAutoCancel(true)
.setChannelId(CHANNEL_ID)
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ant_intro)
.setContentTitle("Anttack")
.setContentText("Continues")
.setSound(ringtoneManager.getDefaultUri(ringtoneManager.TYPE_NOTIFICATION))
// .setPriority(2)
.setContentIntent(pendingIntent);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder.setCategory(Notification.CATEGORY_SERVICE);
}
notification = builder.build();
startForeground(1,notification);
设备进入睡眠状态并唤醒后,屏幕上会显示一条通知。如果您点击它,最小化的活动将被恢复。
如何跟踪 PendingIntent 的完成情况?
也许有人知道如何使用 PendingIntent.onFinished?
解决方法
有一些 Activity
方法可以帮助您确定 Activity
是否因为用户点击通知而进入前台:
Intent
时点击通知,getIntent()
会给您触发 Activity
创建的 Activity
。
覆盖 onNewIntent()
将使您能够访问负责重新启动现有 Intent
的 Activity
。请注意,您还可以为此 Intent
将新的 Intent
设置为“the”Activity
:
@Override
protected void onNewIntent(Intent newIntent){
setIntent(newIntent);
}
因此您可以在为您的 boolean
创建 Intent
时将 Intent
作为额外的 PendingIntent
...
intent = new Intent(this,MainActivity_Large.class);
intent.putExtra("FROM_NOTIFICATION",true);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
... 并在您的代码中对其进行评估,例如在Activity.onResume()
@override
protected void onResume(){
if(getIntent().hasExtra("FROM_NOTIFICATION")){
// Activity was (re-)launched because user tapped notification
}
}
我知道,当 Activity
已启动并正在运行时,您将无法通过这种方式判断用户何时再次点击通知。由于我不知道您的用例,因此我无法判断这是否会发生,或者这是否会成为问题。但由于您还可以将其他数据作为 Intent
extra 传递,因此应该可以根据需要识别每个事件。