android 确定“活动”是否由通知调用

qcbq4gxm  于 2023-05-21  发布在  Android
关注(0)|答案(4)|浏览(140)

我正在使用带有各种选项卡活动。从应用程序的不同部分,创建通知以告诉用户某些内容已更改。我现在成功地调用了Activity,当用户点击通知时。但是,我如何确定Activity是在运行时以“正常”方式创建的,还是通过单击通知创建的?
(根据点击的通知,我想转发到另一个标签,而不是显示主标签。)

Intent intent = new Intent(ctx, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, 0);

        // TODO: Replace with .Build() for api >= 16
        Notification noti = new Notification.Builder(ctx)
                .setContentTitle("Notification"
                .setContentText(this.getName())
                .setSmallIcon(R.drawable.icon)
                .setContentIntent(pendingIntent)
                .setDefaults(
                        Notification.DEFAULT_SOUND
                                | Notification.DEFAULT_LIGHTS)
                .setAutoCancel(true)
                .getNotification();

        NotificationManager notificationManager = (NotificationManager) ctx
                .getSystemService(Context.NOTIFICATION_SERVICE);

        // Hide the notification after its selected
        notificationManager.notify(this.getId(), noti);

这成功调用了我的MainActivity。但是,当Activity被pendingIntent触发时,是否会调用某个方法?
考虑在主活动中定义如下内容:

onTriggeredByNotification(Notification noti){
     //determinte tab, depending on Notification.
}
vof42yt1

vof42yt11#

从notification传递一个布尔值,并在Activity的onCreate方法中检查该值。

Intent intent = new Intent(ctx, MainActivity.class);
 intent.putExtra("fromNotification", true);

...

if (getIntent().getExtras() != null) {
  Bundle b = getIntent().getExtras();
  boolean cameFromNotification = b.getBoolean("fromNotification");
}
e1xvtsh3

e1xvtsh32#

您可以在通知中尝试

Intent intent=new Intent();
intent.setAction("Activity1");

Activity中覆盖onNewIntent()方法并获取action,以便您确定Activity是否被调用。

pobjuy32

pobjuy323#

比使用@ricintech指定的intent的保留action字段更好的是,您可以在挂起的intent中使用额外的参数,并在您的onCreate方法和Activity中的onNewIntent方法中检测它。

fykwrbwg

fykwrbwg4#

在manifest文件中添加android:launchMode="singleTop",则只有onNewIntent()将获得调用

相关问题