(省略简短摘要)我的应用程序中的活动序列出现问题。该应用程序有3个Activity,它从A流向B流向C(如果连续按下,则从C流向B流向A)。在正常操作中,应用程序运行正常,我遇到的问题是收到C2DM通知时。
收到通知后,我希望将PendingIntent发送到当前活动的活动,或者在应用未运行的情况下启动应用。
在通知接收器中,使用当前活动(在Application类中保存)创建PendingIntent,这也可以正常工作。
但是,当活动从使用。创建PendingIntent的活动发生变化时会出现问题。
即在活动C中收到通知,并且创建PendingIntent时Intent指向活动C.用户导航回活动A并单击触发意图的通知并启动活动C并且我希望将其发送到甲
我想要的是将意图发送到当前活动的任何内容。我尝试创建一个作为PendingIntent的目标的Activity X,然后在创建Activity X时检查哪个Activity当前处于活动状态,并存储在Application类中。
但是我在这里也遇到了Intent标志的问题。我想使用SINGLE_TOP标志来确保为当前Activity调用onNewIntent,以便我不会遇到onCreate和onResume中的代码问题。
我在这里遇到的问题是,活动X现在位于活动堆栈的顶部,单顶不会因此而存在。我已经尝试使用NO_HISTORY和EXCLUDE_FROM_RECENTS标志来处理挂起的意图,这样就不会将Activity X添加到堆栈中,然后使用SINGLE_TOP来启动活动A,B或C,但是它创建了一个新实例,而不是使用那个存在。
摘要:
4 activities: A,B,C,X and a receiver for notifications.
on receipt of a notification:
//not sure which is better to use or even if they're right for my purpose
start X with a PendingIntent with FLAG_ACTIVITY_NO_HISTORY or FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
Acivity X then gets the currently running activity from Application (A,B or C)
create an intent for the current activity (A,B or C) with FLAG_ACTIVITY_SINGLE_TOP
But onNewIntent is never called a new instance of A,B or C is created.
对于这个问题是否有更明智的方法,我使用的标志是错误的吗?我是否误解了意图工作方式的基本原则,任何帮助都会受到赞赏。抱歉这个长期的问题。此外,如果需要代码,我可以在明天发布,因为我离开工作站。
答案 0 :(得分:4)
回答Suchi给了我一个尝试在清单中设置值的想法。
所以在Activity X的清单中
android:noHistory="true"
android:launchMode="singleInstance"
以及A,B和C的行为清单
android:launchMode="singleTop"
我仍然在我的未决意图中使用NO_HISTORY标志
startActivity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
startActivity, PendingIntent.FLAG_UPDATE_CURRENT);
并在活动X中,然后将意图发送到A,B或C
//onCreate
myApp = (MyApplication)getApplication();
String s = myApp.getCurrentActivity();
if(s.equals(myApp.ACTIVITY_A)){
Intent intent = new Intent(this,ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
if(s.equals(myApp.ACTIVITY_B)){
Intent intent = new Intent(this,ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
if(s.equals(myApp.ACTIVITY_C)){
Intent intent = new Intent(this,ActivityC.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
finish();
通过广播接收器接收通知,将未决意图发送到活动X,活动X基于当前活动名称(在应用程序中保存)向当前活动活动发送意图并在onNewIntent方法中接收。
答案 1 :(得分:1)
你试过android:noHistory吗?