当应用程序收到推送消息且应用未在Android中运行时,应用层次结构会受到干扰?

时间:2011-10-24 13:17:33

标签: android push hierarchy

我已经在应用程序中实现了C2DM,当应用程序运行时,一切似乎都能正常工作。但是如果app没有运行并且收到了推送消息。在通知面板中点击推送消息时,将调用单独的活动。此活动可以称为PushMsgHandlerActivity。通过此活动,可以将其重定向到应用程序中的其他活动。假设用户单击PushMsgHandlerActivity中的按钮,并重定向到活动A,这是启动器活动。从这里开始,如果用户按下后退按钮,则会在打开推送消息之前转到那里的视图。如果现在按住主页按钮,我们从那里选择应用程序,然后应用程序再次启动PushMsgHandlerActivity,而不是启动启动程序活动。我想的原因是因为这是应用程序首先启动的活动。

无论如何在这种情况下启动启动器活动。

请注意,仅当收到推送消息且应用程序未运行时才会出现此问题。否则,该应用程序的工作和行为正常。

1 个答案:

答案 0 :(得分:0)

如果您从不希望将用户返回到PushMsgHandlerActivity,请尝试关闭该活动的历史记录,如here所述,方法是将标记android:noHistory="true"添加到清单文件中。活动。这应该只在用户将其带到那里时(通过点击推送消息)将用户带到该活动。

这是一个似乎可以做你想要的简单例子。它有两个活动,一个是立即启动通知的NotifyMainActivity,另一个是单击通知时调用的HandleNotificationActivity。

NotifyMainActivity:

public class NotifyMainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

        int icon = R.drawable.ic_launcher;
        CharSequence tickerText = "Hello";
        long when = System.currentTimeMillis();

        Notification notification = new Notification(icon, tickerText, when);

        Context context = getApplicationContext();
        CharSequence contentTitle = "My notification";
        CharSequence contentText = "Hello World!";
        Intent notificationIntent = new Intent(this,
                HandleNotificationActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        notification.setLatestEventInfo(context, contentTitle, contentText,
                contentIntent);

        mNotificationManager.notify(1, notification);
    }
}

HandleNotificationActivity:

public class HandleNotificationActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.handler);
    }

    public void startMain(View view) {
        Intent i = new Intent(this, NotifyMainActivity.class);
        startActivity(i);
        finish();
    }
}

handler.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="startMain"
        android:text="Main" />
</LinearLayout>

我已经通过启动主要活动进行测试,该活动会创建通知。然后按后退按钮,转到主屏幕。单击通知,启动处理程序活动。然后单击Main按钮,然后按返回。它不会让你回到处理程序,因为它自己调用finish()。我希望这个例子可以解决一些问题。