我知道有一些关于这个问题的讨论,但我的情况有所不同。
我的案例:LanchActivity(加载动画) - > MainActivity(包括A和B两个标签) - > ThirdActivity。 MainActivity发布通知。单击通知时,我想要的是:
我已在上面实现,我设置了MainActivity:
android:launchMode="singleTask"
通知时使用以下设置:
Intent resultIntent = new Intent(this, LancherActivity.class);
resultIntent.setAction("android.intent.action.MAIN");
resultIntent.addCategory("android.intent.category.LAUNCHER");
PendingIntent resultPendingIntent = PendingIntent.getActivity(
getApplicationContext(), 0, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
serviceNotificationbuilder.setContentIntent(resultPendingIntent);
serviceNotification = serviceNotificationbuilder.build();
startForeground(1, serviceNotification);
在MainActivity中:
@Override
protected void onResume() {
mTabHost.setCurrentTab(B);
}
我为MainActivity使用singleTask lanchMode的原因是每次单击通知时都避免创建新实例。但是,如果我使用上面的代码,我不想看到发生的事情。
mTabHost.setCurrentTab(B);
因此mTabHost.setCurrentTab(B);
仅在MainActivity来自通知时才有效。但我不知道MainActivity从通知或其他方式开始(最近的应用列表或直接打开应用程序)。
resultIntent.putExtra("flag", "I from Notificaion");
,因此我可以使用该标志来检查MainActivity是否来自通知。任何人都有解决方案,谢谢?
答案 0 :(得分:0)
首先,删除MainActivity的android:launchMode="singleTask"
并更新您的通知意图,如下所示:
Intent resultIntent = new Intent(this, LancherActivity.class);
resultIntent.putExtra("openTabB",true);// add this line
在您的LaunchActivity中,创建一个boolean
字段说openTabB
并将其设置为false
。
在LaunchActivity的onCreate方法中,使用此行
openTabB = getIntent().getExtras().getBoolean("openTabB");
在LaunchActivity中使用MainActivity调用者的Intent。将boolean
额外添加到该意图中,键为openTabB
,值为openTabB字段。
现在,在您的MainActivity中,使用以下行:
openTabB = getIntent().getExtras().getBoolean("openTabB");
if(openTabB)
{
//open tab B
}
else
{
// normal execution
}
我希望这对你有所帮助。
答案 1 :(得分:0)
您应该在onPause()中保存当前标签的索引,并将其恢复为onResume()。
保存索引:
int index = tabHost.getCurrentTab();
恢复索引:
tabHost.setCurrentTab(index);
修改强> MainActivity从通知或其他方式开始的唯一区别是从通知开始需要通过onCreate()和其他方式没有。所以你需要在onCreate()中添加一个标志。
private boolean flag;
private in mCurrentTab = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
flag = true;
}
@Override
protected void onResume() {
if (flag)
setCurrentTab(1); // set to B
else
setCurrentTab(mCurrentTab);
flag = false;
}
@Override
protected void onPause() {
mCurrentTab = tabHost.getCurrentTab();
}