PendingIntent 完成

问题描述

我在服务中记录:

    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() 将使您能够访问负责重新启动现有 IntentActivity。请注意,您还可以为此 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 传递,因此应该可以根据需要识别每个事件。