如何确定哪个Activity在Android中启动了当前的Activity?

时间:2015-06-05 23:04:07

标签: android android-intent android-activity

如果不使用Intent并传递额外的参数,是否可以确定哪个Activity启动了当前的Activity?

3 个答案:

答案 0 :(得分:4)

有两种方法可以做。

  1. 常见的
  2. 在您的通话活动中使用startActivityForResult来启动活动。在这里,我使用ActivityCompat来实现向后兼容。

    ActivityCompat.startActivityForResult(this, new Intent(this, MyActivity.class), 0, null);
    

    然后在被调用者活动中,您可以使用以下代码来检测调用活动。

        if (getCallingActivity() != null) {
            Log.d(TAG, getCallingActivity().getClassName());
        }
    

    注意 在调用活动中,如果您不需要来自被调用者活动的传输数据,则不必实现onActivityResult

    1. 弃用的
    2. 使用系统的后台堆栈来获取最近的任务。但它在API 21之后不起作用,它在API 21之后被弃用。

      在mainifest中声明必要的权限。

      <uses-permission android:name="android.permission.GET_TASKS" />
      

      然后在你的被叫活动中

      ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
      for (ActivityManager.RecentTaskInfo taskInfo : activityManager.getRecentTasks(1, 0)) {
              Log.d(TAG, taskInfo.baseIntent.getComponent().getClassName());
      }
      

答案 1 :(得分:0)

只有我想到的东西才是带有&#34; lastActivity&#34;的HashMap。 &#34;活动&#34;关键和价值。 它将是静态的,因此您可以在每个Activity咒语上更新它。 或者将其保存为SharedPreferences但与HashMap相同... 希望它有所帮助,最好的问候!

答案 2 :(得分:0)

您的应用程序类允许设置ActivityLifecycleListener。每当新活动触及onCreate()时,您都可以将活动toString()getClass().getSimpleName()等内容推送到一堆字符串上,然后使用它来识别它。