7

我正在使用带有各种选项卡的Activity。从应用程序的不同部分,创建通知以告诉用户某些事情发生了变化。当用户单击Notification时,我现在设法调用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

考虑在Main Activity中定义这样的东西:

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

3 回答 3

20

从通知中传递一个布尔值并在活动的 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");
}
于 2013-01-02T12:45:00.290 回答
1

您可以在通知中尝试此操作

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

Activity覆盖onNewIntent()方法和获取操作中,您可以确定是否调用了活动。

于 2013-01-02T12:37:08.493 回答
1

比使用@ricintech 指定的意图的保留操作字段更好,您可以在待处理的意图中使用额外的参数,并在您的onCreate方法和onNewIntent活动中的方法中检测它。

于 2013-01-02T12:39:35.530 回答