PendingIntent 完成
PendingIntent completion
我在服务中记录这个:
intent = new Intent(this,MainActivity_Large.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 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);
设备进入休眠和唤醒后,屏幕上会出现一条通知。如果你点击它,最小化的 activity 将被恢复。
如何跟踪 PendingIntent 的完成情况?
也许有人知道如何使用PendingIntent.onFinished?
有一些 Activity
方法可以帮助您确定 Activity
是否因为用户点击了通知而出现在前台:
如果在必须(重新)创建 Activity
时点击通知,getIntent()
会给你触发 Activity
创建的 Intent
。
覆盖 onNewIntent()
将使您能够访问负责重新启动现有 Activity
的 Intent
。请注意,对于此 Activity
:
,您还有机会将新的 Intent
设置为“the” Intent
@Override
protected void onNewIntent(Intent newIntent){
setIntent(newIntent);
}
因此,在为您的 PendingIntent
创建 Intent
时,您可以将 boolean
作为 Intent
额外添加...
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
额外传递,因此如果需要,应该可以识别每个事件。
我在服务中记录这个:
intent = new Intent(this,MainActivity_Large.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 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);
设备进入休眠和唤醒后,屏幕上会出现一条通知。如果你点击它,最小化的 activity 将被恢复。
如何跟踪 PendingIntent 的完成情况?
也许有人知道如何使用PendingIntent.onFinished?
有一些 Activity
方法可以帮助您确定 Activity
是否因为用户点击了通知而出现在前台:
Activity
时点击通知,getIntent()
会给你触发 Activity
创建的 Intent
。
覆盖 onNewIntent()
将使您能够访问负责重新启动现有 Activity
的 Intent
。请注意,对于此 Activity
:
Intent
设置为“the” Intent
@Override
protected void onNewIntent(Intent newIntent){
setIntent(newIntent);
}
因此,在为您的 PendingIntent
创建 Intent
时,您可以将 boolean
作为 Intent
额外添加...
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
额外传递,因此如果需要,应该可以识别每个事件。