如何检测应用程序是通过应用程序图标点击打开还是通过通知点击打开?

3

推送通知有3种情况。

  1. 情况1:应用程序已在运行,通知出现。
  2. 情况2:应用程序关闭,但通过单击应用程序图标打开通知。
  3. 情况3:应用程序关闭,并从通知单击打开应用程序

我的问题是如何检测应用程序是从情况2还是情况3打开的?如果我能够检测到,那么我就可以保存一些值在首选项中,并使用该值来区分是否需要打开主活动或通知活动。

如果您有更好的想法来决定启动闪屏后应打开哪个活动(无论是主要活动还是通知活动),请告诉我。

Notification notification = new Notification.Builder(context)
    .setAutoCancel(true)
    .setContentTitle("My Notification")
    .setContentText("You have a received notification.")
    .setSmallIcon(getNotificationIcon())
    .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),
           R.drawable.ic_launcher))
    .build();
    notification.defaults=Notification.DEFAULT_SOUND;
    notification.number = notificationCount++;
    Intent notificationIntent = new Intent(context, SplashActivity.class);
notificationIntent.putExtra("pushClicked", true);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    System.out.println("title="+title+"message="+message);
    notification.setLatestEventInfo(context, title, message, contentIntent);
    int SERVER_DATA_RECEIVED = 1;
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    notificationManager.notify(SERVER_DATA_RECEIVED, notification);

在目标(闪屏)活动中。
boolean pushClicked = false;
if(getIntent()!=null){
     pushClicked  = getIntent().getStringExtra("pushClicked");
    System.out.println("pushClicked="+pushClicked); 
    }
System.out.println(pushClicked );

始终返回false


1
在你的通知中附加一个标志,并在 onCreate 中检查该标志。 - Iamat8
我已经尝试过了,但在启动页活动的onCreate方法中没有收到。 - Bhola Nath Mahto
您的启动画面可能已经在后台运行。请在onResume中检查标志。 - Ankur Aggarwal
请发布您尝试过的内容。 - Iamat8
那些给我负一分的人,能提出更好的问题或解决方案吗? - Bhola Nath Mahto
1个回答

4
在通知接收器中创建Intent时,可以添加一个额外的布尔值来打开应用程序活动。 例如:
@Override
public void onReceive(Context context, Intent intent) {
    if (intent == null)
        return;
    Intent splashIntent = new Intent(context, TargetActivity.class);
            splashIntent.putExtra("pushClicked", true);
    context.startActivity(splashIntent);
}

在TargetActivity中检查这个布尔值,以区分推送点击和应用图标点击。

如果TargetActivity是NotificationsActivity.class,你将如何在Splash Activity中获取pushClicked? - Bhola Nath Mahto
我已经这样做了,但是从意图中仍然没有得到任何值。 - Bhola Nath Mahto
在你的NotificationsActivity或SplashActivity里面? - Febi M Felix
SplashActivity,我已经改变了情景,第一次尝试直接打开通知活动,但现在我会在Splash上检查它。 - Bhola Nath Mahto
在您的SplashActivity中,您将无法获取pushclicked额外信息。因此,您可以区分这两个活动。 - Febi M Felix
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接