确定通知是否调用了Activity

时间:2013-01-02 12:31:21

标签: android notifications android-pendingintent

我正在使用带有各种标签 Activitiy 。从应用程序的不同部分创建通知,以告知用户某些内容已更改。当用户点击通知时,我现在设法调用活动。但是,我怎样才能确定在运行时或点击通知时以“正常”方式创建活动

(根据点击的通知,我想转发到另一个标签,而不是显示主标签。)

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。但是,当pendingIntent

触发活动时,是否会调用一些方法

考虑在主要活动中定义类似的内容:

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

3 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:1)

您可以在通知

中尝试此操作
Intent intent=new Intent();
intent.setAction("Activity1");

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

答案 2 :(得分:1)

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