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() 将使您能够访问负责重新启动现有 ActivityIntent。请注意,对于此 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 额外传递,因此如果需要,应该可以识别每个事件。