我已经在应用程序中实现了C2DM,当应用程序运行时,一切似乎都能正常工作。但是如果app没有运行并且收到了推送消息。在通知面板中点击推送消息时,将调用单独的活动。此活动可以称为PushMsgHandlerActivity。通过此活动,可以将其重定向到应用程序中的其他活动。假设用户单击PushMsgHandlerActivity中的按钮,并重定向到活动A,这是启动器活动。从这里开始,如果用户按下后退按钮,则会在打开推送消息之前转到那里的视图。如果现在按住主页按钮,我们从那里选择应用程序,然后应用程序再次启动PushMsgHandlerActivity,而不是启动启动程序活动。我想的原因是因为这是应用程序首先启动的活动。
无论如何在这种情况下启动启动器活动。
请注意,仅当收到推送消息且应用程序未运行时才会出现此问题。否则,该应用程序的工作和行为正常。
答案 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()
。我希望这个例子可以解决一些问题。