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

Android返回到Backback中的活动或打开它

齐阎宝
2023-03-14

我在管理后台堆栈中的活动时遇到困难。如果用户点击通知,则活动B被打开,在某个时候活动B将被关闭,我需要打开活动A,但在这里我可以有两种情况,如果活动A已经打开并且在后台堆栈中,那么我想在不重新打开它的情况下返回到此,如果活动A从未打开过,那么我必须打开它。我如何实现这一点?

val notifyIntent = Intent(context, ActivityB::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK
            putExtra(MODEL_KEY, model)
        }

        NotificationManagerCompat.from(context).notify(
            Date().time.toInt(),
            Builder(context, NotificationSettings.channelId)
                .setSmallIcon(NotificationSettings.smallIconId)
                .setContentTitle(remoteMessage.notification?.title ?: remoteMessage.data[BODY])
                .setContentText(remoteMessage.notification?.body ?: remoteMessage.data[SOURCE])
                .setStyle(
                    BigTextStyle().bigText(
                        remoteMessage.notification?.body ?: remoteMessage.data[SOURCE]
                    )
                )
                .setPriority(PRIORITY_DEFAULT)
                .setContentIntent(
                    getActivity(
                        context, 0, notifyIntent, FLAG_UPDATE_CURRENT
                    )
                )
                .setAutoCancel(true).build()
        )

共有3个答案

翟新
2023-03-14

你可以通过以下方式实现这种行为:https://developer.android.com/training/notify-user/navigation#DirectEntry

元望
2023-03-14

简单的豌豆柠檬汁。

//this functions you put true if opened from notification
private boolean isOpenNotification;

@Override
public void onBackPressed() {
        if (isTaskRoot() && isOpenNotification) {
            finish();
            //open your activity here
        } else {
            setResult(RESULT_OK);
            super.onBackPressed();
        }
}
亢嘉茂
2023-03-14

您可以在活动b中使用此代码:

Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
        Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

这将返回到< code>ActivityA的前一个实例(并删除任务堆栈中位于该实例之上的任何其他活动),或者如果任务中没有< code>ActivityA的现有实例,则它将创建一个新实例。

 类似资料:
  • 我有一个主要的活动,当我点击一个按钮,开始一个新的活动时,我使用了以下代码: 上面的代码是从主活动中运行的。 现在在主活动调用的新活动中,我有一个后退按钮。当我点击这个后退按钮时,我希望我的新活动结束,它必须回到原来的主活动。 我尝试过调用,只是(从新活动),但这会关闭我的整个应用程序(包括我的主要活动)。 如何关闭当前关注的活动,然后返回到主活动? 编辑 事实上,我的手机的后退按钮也关闭了我的整

  • 在Android中,当我们用一个新的片段替换容器视图时,我们可以使用replace()和addToBackStack(),因此按下back按钮就可以转到上一个片段。 但如果出现以下情况怎么办: 在Activity1中,我可以按下back按钮从fragment2转到fragment1。但当fragment2启动另一个活动时,从Activity2按下back按钮,它会将我带到Activity1中的fr

  • 我有第一活动,它通过意图调用第二活动 在SecondActivity完成后,我希望SecondActivity向FirstActivity发送一些变量。然后调用finsih(),它将返回到第一个活动。如何使SecondActivity发送变量并在FirstActivity中获得结果?

  • 单击按钮转到另一个活动,然后返回到原始活动。 我试图保存两个整数离开活动的另一个活动,然后稍后当我返回到原来的活动,我得到一个null包。 有人知道为什么这不起作用吗? 我使用savedInstanceState bundle在屏幕旋转时保存变量,它在这种情况下工作,但是当我离开查看另一个活动并稍后返回此活动时,该bundle没有保存。返回时获取空值。 onSavedInstanceState方法

  • 在profileActivity.java中有以下代码: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

  • 我有一个应用程序具有这种转换: 输入后,我必须检查一个标志。然后我必须将其作为意图(让我们说)传递给。在中做了一些事情后,它会在按下按钮后返回。我所做的只是再次传递值为true的,然后再次启动活动C。所以发生的是它创建了另一个活动C。 我想做的是,我不必启动一个新的活动C,只需调用super即可使用以前的C。onBackPressed()。但我无法传递intentX的新值。有没有其他方法来实现我想