当前位置: 首页 > 知识库问答 >
问题:

如何知道活动是从通知或其他方式开始的(从最近的应用程序列表中单击,或直接打开应用程序)

强化
2023-03-14

我知道关于这个问题有一些讨论,但我的情况不同。

我的案例:LanchActive(加载动画)-

  • 如果应用程序在后台,请将应用程序带到前台,并在Mainactive中显示选项卡B。
  • 如果应用程序被杀死,启动应用程序,LanchActive-

我已经实现了以上内容,我设置了主要活动:

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);

在主活动中:

@Override
protected void onResume() {
  mTabHost.setCurrentTab(B);
}

我在MainActivity中使用singleTask lanchMode的原因是为了避免每次单击通知时创建新实例。然而,如果我使用上面的代码,就会发生一些我不想看到的事情。

  • 我从选项卡A开始第三个活动,单击返回按钮返回到Mainactive,Mainactive显示选项卡B
  • 选项卡A显示在前台,点击home按钮显示主页,然后从最近的应用程序列表中恢复应用程序,它也会显示选项卡B,因为mTabHost.setMONtTab(B);

所以mTabHost.setMONTTAB(B);应该只在Mainactive来自通知时工作。但我不知道Mainactive是从通知或其他方式开始的(最近的应用程序列表或直接打开应用程序)。

  1. 如果应用程序被杀死,通知-

有人有办法吗,谢谢?

共有2个答案

有宏邈
2023-03-14

您应该在onPause()中保存当前选项卡的索引,并在onResume()中恢复它。

保存索引:

int index = tabHost.getCurrentTab();

恢复索引:

tabHost.setCurrentTab(index);

编辑:MainActivity start from notification和other way之间的唯一区别是start from notification需要通过onCreate()而other way不需要。因此,您需要在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();
}
融建树
2023-03-14

首先,删除MainActivity的android:launchMode=“singleTask”,并更新您的通知意图,如下所示:

Intent resultIntent = new Intent(this, LancherActivity.class);
resultIntent.putExtra("openTabB",true);// add this line

在您的Launchactive中,创建一个boolean字段,说openTabB并将其设置为false
在Launchactive的onCreate方法中,使用此行

openTabB = getIntent().getExtras().getBoolean("openTabB");

在LaunchActive中使用MainActive调用者的Intent。在该意图中添加boolean额外,key是openTabB,value是openTabB字段。

现在,在您的主要活动中,使用以下行:

openTabB = getIntent().getExtras().getBoolean("openTabB");
if(openTabB)
{
    //open tab B
} 
else
{
    // normal execution
}

我希望这对你有帮助。

 类似资料:
  • 我正在开发一个应用程序,它使用GCM进行推送通知。 我的问题是关于如何从用户单击通知时打开/启动应用程序。我有两种潜在的情况: A)应用程序已打开,并且驻留在前台或后台,无论哪种方式,我的GCM工作正常,GCM消息到达用户点击通知并意图启动相关活动(通过通知等待意图传递)。 b)应用程序关闭,收到通知,用户再次点击通知,并试图开始相关活动,这是它变得混乱的地方。该应用程序有一个后端,所以现在需要自

  • 我的应用程序有如下活动堆栈 A:加载活动 B:主要活动 C:细节活动 清单是这样的 当我从启动器启动应用程序时,它充当A- 但当我从通知启动应用程序时,因为我不想显示加载屏幕,启动活动B。所以,用户可以导航B- 但当用户在活动C中按Home键并从最近的应用程序列表中选择应用程序时,B会重新启动,状态不会保留。所以C活动总是消失。 我尝试了许多标志选项,但我没有找到解决方案。我想要的是应用程序的行为

  • 我已经创建了一个Windows Phone 8.1应用程序,它可以将吐司通知发送到Windows Phone的操作中心。现在我需要在用户点击toast通知时打开另一个应用程序。我怎样才能实现这个..?我可以打开创建toast通知的同一个应用程序。我怎么才能打开另一个我指定的应用程序...?

  • 当用户在我的通知中单击一个按钮时,我正试图打开,而该应用程序仅在后台运行并提供服务。单击按钮时,这些行在类中被触发: 我已经检查过了,这些行被触发了,所以对按钮的点击做出反应没有问题,但是不会打开。 有什么建议吗?为什么这对我不起作用,我怎么能让它起作用? 我被要求提供更多的代码,因此在我的

  • 我想知道是否有办法知道一个应用程序(可以在后台关闭或打开)是否已经启动,只需单击: 通知(在通知中心)? 还是跳板上的应用程序图标? 谢谢

  • 在通知部分,我有这个通知不打开APP的问题。有什么建议吗?我试了很多可能性,但没有...我错在哪里?请帮帮我。